2016-09-19 79 views
3

This问题有点相关但仍不能解决我的问题。考虑两个类A和B:将对象的指针传递给构造函数中的另一个类

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])); 
} 

在主函数创建称为BOBJ B类类型的对象。 B调用run()和B.run()的构造函数进入无限循环。它创建了多个对象A. 现在我想将bObj的指针传递给类A的新创建对象,以便它们可以访问其他公共变量和bObj的函数。所以我通过这个指针,同时从B创建A的对象。并且我已经在类A中声明了B *类的类变量协调器。但是我得到这个:编译器错误 - >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

在类A的声明之上。查看我的回答中的代码段 – WhiZTiM

+0

谢谢,我做到了。但是现在我得到了错误,我已经声明了类型A的变量。就像在B中有一个向量,它包含在B中创建的A的实例。当我创建向量 allAs ;.我的错误是“模板参数1无效”。我在A的构造函数初始化列表中初始化传递给A的B *。 – PHcoDer

相关问题