繁体   English   中英

错误:成员访问的类型不完整:正向声明

[英]error: member access into incomplete type : forward declaration of

我在同一个.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类。

您对如何解决我的问题有任何想法吗?

doSomething定义移至其类声明的外部,并移至B之后,还可以通过将其public或将其friend使其addA

class B;

class A
{
    void doSomething(B * b);
};

class B
{
public:
    void add() {}
};

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

使用该类之前,必须具有B类的定义 否则编译器将如何知道存在诸如B::add类的功能?

可以在A类之前定义B类,或者将A::doSomething的主体移到B类定义之后,例如

class B;

class A
{
    B* b;

    void doSomething();
};

class B
{
    A* a;

    void add() {}
};

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM