我在我的一个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");
}
答案 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();
}
这应该有用。