【发布时间】:2014-02-09 03:13:10
【问题描述】:
我开始学习 C++,但在下面找不到错误的原因。这段代码在《自学 C++》一书中。
main.cpp:13: 错误:'std::cin >> (int)ip' 中'operator>>' 的重载不明确
#include<iostream>
using namespace std;
enum ignition_parts {distributor=1,cap,points,plug,condenser,coil,wires,done};
main() {
ignition_parts ip;
do{
cout << "\nInsira no item (1-7, 8 para sair):";
std::cin >> (int)ip;
switch(ip){
case distributor: cout<< "Distribuidor";
break;
case cap: cout<< "Tampa";
break;
case points: cout << "Pontos";
break;
case plug:cout << "Vela";
break;
case condenser: cout<<"Condensador";
break;
case done: break;
default: cout << "No item ignorado";
break;
}
} while (ip != done);
}
【问题讨论】:
-
你不应该得到多个匹配项,你应该没有得到匹配项。
-
@chris 有很多匹配项需要 /equally bad/ 隐式转换。欢迎来到 C++ 地狱 :)
-
@sehe,嗯,是的。我的意思是,如果编译器找到同样的 good 匹配项,那么编译器肯定会非常糟糕,从而使调用变得模棱两可。
-
@chris 如果不符合语言规范,那就更难了...
-
@sehe,语言的哪一部分说你可以做到
std::cin >> (int)ip;?在某种程度上就像std::cin >> 2;。
标签: c++ operator-overloading std cin