'B ::运算符A'使用未定义的类'A'

时间:2015-09-04 11:52:47

标签: c++ oop

我在我的一个C ++课程中找到了以下示例。当我尝试编译它时,我收到以下错误:

'B::operator A' uses undefined class 'A'

为什么说A类未定义?

#include<iostream>
using namespace std;

class A;
class B
{
    int x;
public: B(int i = 107) { x = i; }
        operator A();
};
B::operator A() { return x; }

class A
{
    int x;
public: A(int i = 6) { x = i; }
        int get_x() { return x; }
};

int main()
{
    B b;
    A a = b;
    cout << a.get_x();
    system("Pause");
}

2 个答案:

答案 0 :(得分:3)

编译器需要知道A在这里:

B::operator A() { return x; }

但你只有前瞻声明。您需要将类A的声明移到B

之上

您只能使用指针或不完整类型的引用,这是您forward declare类型时的内容

答案 1 :(得分:2)

您需要在B上面声明A,以便A的定义对B可见。

#include<iostream>
using namespace std;

class A
{
    int x;
public: A(int i = 6) { x = i; }
        int get_x() { return x; }
};


class B
{
    int x;
public: B(int i = 107) { x = i; }
        operator A();
};
B::operator A() { return x; }

int main()
{
    B b;
    A a = b;
    cout << a.get_x();
}

这应该有用。