链接器错误以及如何访问成员

时间:2015-05-23 17:32:32

标签: c++ class linker linker-errors

#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的符号。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

EDIT2:意识到

之后
B it();

不是返回B的函数,而是A类中的对象: 您具有循环依赖性,其中A使用B而B使用A.编译器无法解析此问题。 转发声明如

class N;

仅适用于指针或引用,其中实际对象大小不必知道

编辑:我刚才意识到我误读了错误信息。 您缺少it()方法的函数定义。

前锋声明可能不适用于

B it();

将代码更改为

B& it();

应解决您的问题

请注意,B现在通过引用而不是按值返回。所以你可能会做类似的事情

const B& it() const;