考慮下面的代碼:提前聲明不轉換操作符的工作
#include <iostream>
using namespace std;
class B;
class A
{
public:
A() { p = 1;}
int p;
operator B() {B b; b.x = this->p; return b;}
};
class B
{
public:
int x;
};
int main()
{
A a;
B b = a;
return 0;
}
我想A
轉換爲B
,但我得到以下編譯器尖叫:
..\main.cpp:13: error: return type 'struct B' is incomplete
當我這樣做:
#include <iostream>
using namespace std;
class B
{
public:
int x;
};
class A
{
public:
A() { p = 1;}
int p;
operator B() {B b; b.x = this->p; return b;}
};
int main()
{
A a;
B b = a;
return 0;
}
代碼編譯,但問題是:是否有可能做使用我上面寫的前向聲明?
由於大部分 羅南
而且人們可以使用A/B/B的定義,只是沒有在任何地方調用轉換運算符(如果我沒有錯的話)。這就是Qt爲GUI類型所做的事情:在頭文件中前向聲明'QVariant',在類聲明中放置合適的運算符聲明,幷包含「QVariant」,並在相應的* .cpp文件中定義運算符。 – mlvljr