2011-05-21 43 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

相关问题