错误:成员访问不完整类型:转发声明

时间:2013-11-13 19:37:36

标签: c++ forward-declaration

我在同一个.cpp上有两个课:

//forward
class   B;

class   A {       
   void   doSomething(B * _b) {
      _b->add();
   }
};

class   B {

   void   add() {
      ...
   }

};

前锋不起作用,我无法编译。

我收到了这个错误:

error: member access into incomplete type 'B'
note: forward declaration of 'B'

我正在使用clang编译器(clang-500.2.79)。

我不想使用多个文件(.cpp和.hh),我只想在一个.cpp上编码。

我不能在A班前写B班。

你有什么想法解决我的问题吗?

祝你好运。

2 个答案:

答案 0 :(得分:24)

doSomething定义移出其类声明之外,然后移至B,并通过add A使public可以访问friendclass B; class A { void doSomething(B * b); }; class B { public: void add() {} }; void A::doSomething(B * b) { b->add(); } - 它 - 。

{{1}}

答案 1 :(得分:8)

在使用该类之前,您必须拥有类B定义。编译器怎么会知道存在B::add这样的函数?

在课程B之前定义课程A,或者在课程A::doSomething之后移动B的主体,例如

class B;

class A
{
    B* b;

    void doSomething();
};

class B
{
    A* a;

    void add() {}
};

void A::doSomething()
{
    b->add();
}