出于某种原因,我收到一个错误:
'std :: cin >> C1'中运算符'operator >>'的模糊运算符.
ostream & operator<<(ostream & out, const ComplexNumber & n);
istream & operator>>(istream & in, ComplexNumber & n);
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
int main()
{
ComplexNumber C1();
cin>>C1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
ComplexNumber C1();
Run Code Online (Sandbox Code Playgroud)
这不符合你的想法.
具有自动存储持续时间的对象的声明通常采用以下两种形式之一:
Type name(constructor-arguments); // (1)
Type name; // (2)
Run Code Online (Sandbox Code Playgroud)
需要注意的是第二种形式并不能有一个空括号(()).
那是因为C++的一个怪癖是以下声明一个被调用的函数name返回一个类型的对象Type:
Type name(); // (3)
Run Code Online (Sandbox Code Playgroud)
现在,您没有告诉我们编译器的诊断输出列出的候选重载是什么,但显然您声明的函数name可以转换为多个目标类型,从而导致"模糊过载"错误; 无论如何,没有一个候选人实际上是你的意思.
相反,写:
int main() {
ComplexNumber C1;
cin >> C1;
}
Run Code Online (Sandbox Code Playgroud)
我还建议:
std::string而不是C风格的字符串.