出于某种原因,我收到错误:
运营商'运营商的模糊运算符>>'在'std :: cin>> C1'。
ostream & operator<<(ostream & out, const ComplexNumber & n);
istream & operator>>(istream & in, ComplexNumber & n);
ostream& operator << (ostream & out, const ComplexNumber & n)
{
n.print(out);
return out;
}
istream& operator >> (istream & in, ComplexNumber & n)
{
char c1[10];
cout<<("Enter complex number: ");
in>>c1;
double a,b;
a=c1[0]-'0';
b=c1[2]-'0';
ComplexNumber answer(a,b);
n=answer;
return in;
}
int main()
{
ComplexNumber C1();
cin>>C1;
return 0;
}
candidates are: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__istream_type& (*)(std::basic_istream<_CharT, _Traits>::__istream_type&)) [with _CharT = char, _Traits = std::char_traits<char>
答案 0 :(得分:8)
ComplexNumber C1();
这不符合你的想法。
具有自动存储持续时间的对象声明通常采用以下两种形式之一:
Type name(constructor-arguments); // (1)
Type name; // (2)
请注意,第二种形式不有一组空括号(()
)。
那是因为C ++的一个怪癖是以下内容声明了一个名为name
的函数,该函数返回Type
类型的对象:
Type name(); // (3)
现在,您没有告诉我们编译器的诊断输出所列出的候选重载是什么,但显然您声明的函数name
可以转换为多个目标类型,从而导致“模糊的重载” “错误;无论如何, none 的候选人实际上就是你的意思。
这个“问题”被称为“Most Vexing Parse”。
相反,写一下:
int main() {
ComplexNumber C1;
cin >> C1;
}
我还建议:
std::string
而不是C风格的字符串。答案 1 :(得分:2)
ComplexNumber C1();
声明一个函数C1()
,它不带参数并返回ComplexNumber
。
这在C ++中被称为 Most Vexing Parse 。
答案 2 :(得分:2)
本声明:
ComplexNumber C1();
不会创建ComplexNumber
的实例。相反,它声明了一个名为C1
的函数,该函数不带参数并返回ComplexNumber
。