知道为什么我在我的c ++程序中遇到这两个错误吗?

时间:2011-05-21 22:49:40

标签: c++ operator-overloading

我正在编写一个创建复杂数字类的程序,当我尝试测试我的重载运算符>>时,我遇到了这两个错误。以下是错误:

  

错误LNK2028:未解析的令牌   (0A0002BD)“上课   std :: basic_istream> &安培; __cdecl   运营商GT;>(类   std :: basic_istream> &安培;,类   复杂的const&)“   (?? 5 @ $$ FYAAAV?$ basic_istream @ DU?$ char_traits @ d @ STD @@@ STD @@ @ AAV01 @@@ ABVComplex Z)   在函数“int __cdecl中引用   main(void)“(?main @@ $$ HYAHXZ)

     

错误LNK2019:未解析的外部   符号“类   std :: basic_istream> &安培; __cdecl   运营商GT;>(类   std :: basic_istream> &安培;,类   复杂的const&)“   (?? 5 @ $$ FYAAAV?$ basic_istream @ DU?$ char_traits @ d @ STD @@@ STD @@ @ AAV01 @@@ ABVComplex Z)   在函数“int __cdecl中引用   main(void)“(?main @@ $$ 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;
}

2 个答案:

答案 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 & );

答案 1 :(得分:0)

我猜你已经将>>运算符作为你班级的成员实现了,因为它真的需要friend才能以你想要的方式使用它。

看看这个问题:Should operator<< be implemented as a friend or as a member function?

Scott Meyers还有一个关于这些运算符的部分:有效的C ++编程,但是我没有这本书可以提供参考。