我在同一个.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班。
你有什么想法解决我的问题吗?
祝你好运。
答案 0 :(得分:24)
将doSomething
定义移出其类声明之外,然后移至B
,并通过add
A
使public
可以访问friend
或class 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();
}