我正在尝试编译某些内容,但它不会,而且我在网络上找不到任何相关内容。
#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()
{
A a;
B b=a;
cout<<a.get_x();
return 0;
}
我收到错误: 返回类型“A 类”不完整 请求从“A”到非标量类型“B”的转换
即使这样也行不通:
B B;
A a=b;
我不知道我做错了什么,也不知道在哪里可以找到有关该主题的更多信息。
谢谢
最佳答案
您没有发布错误的全文,这意味着您遗漏了所有重要的行号。通常情况下,行号通常是错误中最有值(value)的信息。
class A;
class B
{
...
};
B::operator A() {return x;}
我猜测这是您的编译器告诉您发生错误的行。
在这行代码中,编译器还没有完整的 A
声明,因此它不知道如何将 int x
转换为 class A
。 C++ 编译是单遍编译,因此它不能推迟此查找。
您需要先完成声明,然后再进行定义。
class A;
class B
{
int x;
public:
B(int i=107) {x=i;}
operator A();
};
class A
{
int x;
public:
A(int i=6) {x=i;}
int get_x() {return x;}
};
// done with declarations. begin definitions.
B::operator A() {return x;}
// compiler quietly expands this to be:
// B::operator A() { return A::A(i=this->x); }
通常 A
和 B
将位于头文件中,并且您将在 .cpp 文件的某处保留定义,这需要完全声明这两个类。
关于c++ - C++ 类类型转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30762401/