#include <iostream>
#include <stdlib.h>
class B;
class A {
int x;
public:
B it();
friend class B;
};
class B {
int y;
A a;
public:
B(A aa):y(99), a(aa) {};
int get_y() {
return this -> y;
}
};
using namespace std;
int main() {
A md;
cout << md.it().get_y() << endl;
return 0;
}
忽略封装和其他细节,我的问题是我想使用&#34; md.it()。get_y()&#34;,但我的编译器给了我这个链接器错误: 架构x86_64的未定义符号: &#34; A :: it()&#34;,引自: _main在main.o中 ld:找不到架构x86_64的符号。 我该如何解决这个问题?
答案 0 :(得分:0)
EDIT2:意识到
之后B it();
不是返回B的函数,而是A类中的对象: 您具有循环依赖性,其中A使用B而B使用A.编译器无法解析此问题。 转发声明如
class N;
仅适用于指针或引用,其中实际对象大小不必知道
编辑:我刚才意识到我误读了错误信息。 您缺少it()方法的函数定义。前锋声明可能不适用于
B it();
将代码更改为
B& it();
应解决您的问题
请注意,B现在通过引用而不是按值返回。所以你可能会做类似的事情
const B& it() const;