Ссылка на клас в поле класа :)

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
CyberM
Сообщения: 1
Зарегистрирован: 04 июл 2007, 22:02

Ссылка на клас в поле класа :)

Сообщение CyberM » 04 июл 2007, 22:24

вобщем есть типа такого:

Код: Выделить всё

class Bla{
public:
    int pole1;
    double pole2;
public: 
    Bla(int a){
    pole1=a;
    pole2=0;
     }
    int func1(){
     return pole1;
      }
};
class BlaBla{
public:
     int pole3;
      int pole3333;
     Bla *bla[10];
public:
    
   BlaBla(int n)
   {
       pole3=n;
        pole3333=0;
   for(int i<0; i<n;  i++)
           {
                if(!bla[i])
                    {
                          bla[i]=new Bla(a);
                     }
           }
     
   }
   int func2(){
   for(int i<0; i<n;  i++)
           {
                if(bla[i]->pole1==1)
                    {
                          bla[i]->pole2=10;
                     }
           }   


   }
и при обращении к полю
например тут:

Код: Выделить всё

if(bla[i]->pole1==1)
праграма виснет намертво smile
как сделать правильно? )

Hawk
Сообщения: 215
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

Re: Ссылка на клас в поле класа :)

Сообщение Hawk » 04 июл 2007, 23:53

if(!bla) !!!
{
bla=new Bla(a);
}

В массиве bla лежат любые значения случайные, ты их не проинициализировал. А С++ не пишет туда нули сам. убери просто эту проверку и создавай сразу new. Конструктор в любом случае один раз при создании экземпляра класса вызывается. Так что условие тут совершеннг не нужно и не верно.

Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Re: Ссылка на клас в поле класа :)

Сообщение Romeo » 05 июл 2007, 12:07

А ещё обязательно нужен деструктор в классе BlaBla. Он должен вызывать delete bla в цикле. Иначе - это мэмори лик.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

Ответить