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]));
}
在main函数中,我创建了一个名为bObj的B类对象。 B的构造函数调用run()和B.run()进入无限循环。它创建多个A对象的位置。 现在我想将bObj的指针传递给新创建的A类对象,以便它们可以访问bObj的其他公共变量和函数。所以我在从B创建A的对象时传递这个指针。我在类A中声明了B *类的类变量 coordinator 但是我得到了这个:编译错误 - > ISO C ++禁止声明'B'没有类型。
请帮我解决这个问题。我是C ++的新手。
答案 0 :(得分:1)
在当前代码中,编译器会在构造函数中看到实体B
,但并不知道它是一种类型,因为它还没有遇到这种类型声明。
要解决您的问题,您只需转发声明B
即可。并记住每个类定义
;
分号
class B; //forward declaration
class A{
public:
A(int id, B* coordinator);
virtual ~A();
B *coordinator;
}; //remember the semi-colon!
答案 1 :(得分:1)
您是否尝试过 B 类的前向声明?这至少应该可以部分解决您的问题。