将对象的指针传递给其构造函数中的另一个类

时间:2016-09-19 01:55:51

标签: c++ pointers

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 ++的新手。

2 个答案:

答案 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 类的前向声明?这至少应该可以部分解决您的问题。