C++ 复杂类的运算符>>中的不明确重载
C++ Ambiguous overload in operator>> for complex class
无论我做什么,我都会不断地得到一个不明确的重载错误。。。。这是我的代码
COMPLEX.cpp代码
template<class C> class complex
{
C real,imag;
public:
//constructors
complex(C real=0,C imag=0)
{
complex::real=real;
complex::imag=imag;
}
complex(const complex& cmplx)
{
real=cmplx.real;
imag=cmplx.imag;
}
//functions available
complex<C> operator+(const complex&);
complex<C> operator+(double);
void operator=(const complex&);
//friend functions available
template<class F> friend complex<F> operator+(double,const complex<F>&);
template<class F> friend istream& operator>>(istream&,const complex<F>&);
template<class F> friend ostream& operator<<(ostream&,const complex<F>&);
};
OPERATOR>>实现
template<class F> istream& operator>>(istream& cin,const complex<F>& cmplx)
{
cout<<"nenter real part followed by imaginary part : ";
cin>>cmplx.real>>cmplx.imag;
return cin;
}
MAIN方法
int main(void)
{
complex<int> C1;
complex<int> C2;
complex<int> C3;
cin>>C1>>C2>>C3;
cout<<C1<<C2<<C3;
C1=C1+3;
C2=2+C2;
C3=C1+C2;
cout<<C1<<C2<<C3;
complex<int> C4(C3);
cout<<C4;
return 0;
}
编译器错误
COMPLEX.cpp: In function ‘std::istream& operator>>(std::istream&, const complex<C>&) [with F = int, std::istream = std::basic_istream<char>]’:
COMPLEX.cpp:91:7: instantiated from here
COMPLEX.cpp:75:2: error: ambiguous overload for ‘operator>>’ in ‘cin >> cmplx.complex<int>::real’
COMPLEX.cpp:75:2: note: candidates are:
/usr/include/c++/4.6/istream:122:7: note: 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>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>] <near match>
/usr/include/c++/4.6/istream:122:7: note: no known conversion for argument 1 from ‘const int’ to ‘std::basic_istream<char>::__istream_type& (*)(std::basic_istream<char>::__istream_type&) {aka std::basic_istream<char>& (*)(std::basic_istream<char>&)}’
/usr/include/c++/4.6/istream:126:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__ios_type& (*)(std::basic_istream<_CharT, _Traits>::__ios_type&)) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>, std::basic_istream<_CharT, _Traits>::__ios_type = std::basic_ios<char>] <near match>
/usr/include/c++/4.6/istream:126:7: note: no known conversion for argument 1 from ‘const int’ to ‘std::basic_istream<char>::__ios_type& (*)(std::basic_istream<char>::__ios_type&) {aka std::basic_ios<char>& (*)(std::basic_ios<char>&)}’
/usr/include/c++/4.6/istream:133:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>] <near match>
/usr/include/c++/4.6/istream:133:7: note: no known conversion for argument 1 from ‘const int’ to ‘std::ios_base& (*)(std::ios_base&)’
/usr/include/c++/4.6/istream:241:7: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__streambuf_type*) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<char>] <near match>
/usr/include/c++/4.6/istream:241:7: note: no known conversion for argument 1 from ‘const int’ to ‘std::basic_istream<char>::__streambuf_type* {aka std::basic_streambuf<char>*}’
在此之前,我写了一个MIX.cpp和istream重载在那里工作得很好,尽管它几乎和这里一样。。。。
template<class F> istream& operator>>(istream& cin,const complex<F>& cmplx)
^^^^^
这个常量是个问题-您需要在这里更改cmplx
,它不能是常量。这就是编译器所抱怨的:cmplx.real
就是该函数中的const int
。
相关文章:
- Visual C++(VS2017)中用户定义的转换不明确
- 重载类方法的不明确调用
- 为函数定义符号不明确的指针参数
- 父类的私有函数会导致对具有相同名称和相似参数的子类中的公共函数的不明确调用
- 在 C++17 中的命名空间和子命名空间中重载运算符是不明确的
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 对重载函数find_first_not_of的不明确调用
- 不明确的成员模板查找
- gcc出现不明确的模板实例化错误
- 调用'Node'构造函数是不明确的
- 如何解决不明确的运算符过载问题?
- 使用 nullptr 调用重载方法是不明确的
- "fpclassify":对重载函数的不明确调用
- 对"列表"的引用不明确,包括头文件
- 删除全局隐式函数 - 避免使用不明确的运算符
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- "byte":使用Crypto++和Windows SDK时出现不明确的符号错误
- 使用 std::iterator_traits<> 时编译时错误不明确
- 不明确的函数模板
- Vulkan中的描述符集计数不明确