2011-05-21 165 views
2

我正在編寫一個程序,它創建一個複數類,當我嘗試測試我的重載操作符>>時出現這兩個錯誤。下面是錯誤的:任何想法,爲什麼我在我的C++程序中得到這兩個錯誤?

錯誤LNK2028:無法解析令牌 (0A0002BD)「類 的std :: basic_istream> & __cdecl 操作>>(類 的std :: basic_istream> &,類 複雜常量&) (void)「(())中引用的 (」5「$ FYAAAV?$ basic_istream @ DU?$ char_traits @ D @ std @@@ std @@ AAV01 @ ABVComplex @@@ Z) (函數」int __cdecl 「 ?main @@ $$ HYAHXZ)

錯誤LNK2019:無法解析的外部 符號 「類 的std :: basic_istream> & __cdecl 操作>>(類 的std :: basic_istream> &,類 複雜常量&)」 (?? 5 @ $$ FYAAAV?$ @ basic_istream杜?$ char_traits @ d @性病性病@@@ @@ AAV01 @ ABVComplex @@@ Z) 函數 「INT __cdecl 主要(無效)」(引用?主要@@ $$ HYAHXZ)

這裏是我的過載功能:

istream& operator >> (istream& in, Complex& a){ 
    double real, imaginary; 
    in >> real >> imaginary; 
    a.setReal(real); 
    a.setImaginary(imaginary); 
    return in; 
} 

另外它說它來自我的mainComplex.obj,mainComplex是一個cpp文件,它具有我用來測試程序的主要功能。

int main(){  
    Complex num; 
    cout << "Enter Complex number: "; 
    cin >> num; 
    return 0; 
} 

回答

4

編譯器,處理main時已經發現,對於表達cin >> num;std::basic_istream<...>& operator>>(std::basic_istream<...>&, const Complex&)最好過載,請注意在第二個參數的const

這可能表明您已經聲明運營商爲:

std::istream& operator>>(std::istream&, const Complex &); 

但隨後實現:

std::istream& operator>>(std::istream&, Complex &); 
+0

啊是的!它編譯和工作!非常感謝你!我想我只是在宣言中忽略了那個常量。 – Thomas 2011-05-21 23:14:18

+0

錯誤字符串不是最簡單的閱讀,但它們包含有關編譯器/鏈接器從代碼中解釋什麼的信息,並且確實有助於捕獲錯誤。 – 2011-05-21 23:16:01

0

我猜你已經實現了>>運營商爲您的類的成員時,實際上它需要一個friend爲了在你想讓你的方式來使用它。

看一看這太問題:Should operator<< be implemented as a friend or as a member function?

也有對這些運營商在斯科特邁爾斯一節:有效的C++編程,但我沒有這本書,隨手給一個參考。

+0

我運算符重載都聲明爲友元函數在我的Complex類沒有成員函數。 – Thomas 2011-05-21 22:59:45

+0

在這種情況下,您可能試圖從函數中的'cin'中讀取,而不是從'in'中的istream參數''cin >> real >> imaginary;'如果該行是'in >> real> > imaginary;' – Tony 2011-05-21 23:03:26

+0

感謝您的支持,但編譯時仍會出現同樣的錯誤。 – Thomas 2011-05-21 23:07:53

相關問題