2016-09-19 3 views
3

This вопрос несколько связан, но все еще не решает мою проблему. Рассмотрим два класса А и В:Передача указателя объекта другому классу в его конструкторе

class A{ 
public: 
    A(int id, B* coordinator); 
    virtual ~A(); 
    B *coordinator; 
} 
class B{ 
public: 
    B(int id, int param2); 
    virtual ~B(); 
    run(); 
} 

void b::run(){ 
    while(true){ 
     A(1, this); 
     A(2, this); 
     //something else create which may create more A 
    } 
} 

int main(int argc, char* argv[]) { 
    B bObj(atoi(argv[1]), atoi(argv[2])); 
} 

В главном функции я создаю объект типа класса B называется BobJ. Конструктор вызовов B run() и B.run() переходит в бесконечный цикл. Где он создает несколько объектов A. Теперь я хочу передать указатель bObj на вновь созданные объекты класса A, чтобы они могли обращаться к другим общедоступным переменным и функциям bObj. Поэтому я передаю этот указатель при создании объектов A из B. И я объявил переменную класса координатор типа B * в классе A. Но я получаю это: Ошибка компилятора ->ISO C++ запрещает объявление «B» без типа.

Пожалуйста, помогите мне с этим. Я довольно новичок в C++.

ответ

1

В вашем текущем коде компилятор видит объект B в вашем конструкторе, но не знает его как типа, так как он еще не сталкивался с таким объявлением типа.

Чтобы решить вашу проблему, вам следует просто отправить объявление B. И помните ; запятой в конце каждого определения класса

class B;      //forward declaration 

class A{ 
public: 
    A(int id, B* coordinator); 
    virtual ~A(); 
    B *coordinator; 
};        //remember the semi-colon! 
+0

Спасибо! Где я должен делать это заявление? – PHcoDer

+0

Над декларацией 'class A'. См. Фрагмент в моем ответе – WhiZTiM

+0

Спасибо, я сделал это. Но теперь я получаю ошибку везде, где я объявлял переменные типа A. Подобно тому, как есть вектор в B, который содержит экземпляры A, созданные в B. Когда я создаю вектор allAs ;. Я получаю ошибку, поскольку «аргумент шаблона1 недействителен». Я инициализирую B *, переданный в список инициализаторов конструкторов A. – PHcoDer

Смежные вопросы