2015-09-04 86 views
1

我在其中一個C++課程中找到了以下示例。當我嘗試編譯它時,出現以下錯誤:'B :: operator A'使用未定義的類'A'

'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

你不能在前向聲明中使用它。在這種情況下,「A」的聲明需要在聲明「B」之前進行。你的情況只允許指針或引用。 –

回答

3

編譯器需要知道什麼是在這裏:

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

但是你只有一個向前聲明。您需要將上述B

A類的聲明,你只能使用指針或不完全類型的引用這就是有,當你forward declare類型

2

你需要聲明一個以上的B,所以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(); 
} 

這應該起作用。

相關問題