我正在编写一个创建复杂数字类的程序,当我尝试测试我的重载运算符>>时,我遇到了这两个错误。以下是错误:
错误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;
}
答案 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 ++编程,但是我没有这本书可以提供参考。