在同一个.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类。
你知道如何解决我的问题吗?
发布于 2013-11-14 03:44:51
将doSomething
定义移到它的类声明之外,移到B
之后,并通过public
-ing it或friend
-ing it使A
可以访问它。
class B;
class A
{
void doSomething(B * b);
};
class B
{
public:
void add() {}
};
void A::doSomething(B * b)
{
b->add();
}
发布于 2013-11-14 03:41:23
在使用类之前,您必须有类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();
}
https://stackoverflow.com/questions/19962812
复制相似问题