操作员过载不明确>&燃气轮机; 我开始学习C++,我找不到下面的错误原因。这个代码在“自学C++”的书中。
main.cpp:13:错误:“std::cin>>(int)ip”中的“operator>>”重载不明确操作员过载不明确>&燃气轮机; 我开始学习C++,我找不到下面的错误原因。这个代码在“自学C++”的书中。,c++,operator-overloading,std,cin,C++,Operator Overloading,Std,Cin,main.cpp:13:错误:“std::cin>>(int)ip”中的“operator>>”重载不明确 #包括 使用名称空间std; 枚举点火零件{分配器=1,盖,点,插头,冷凝器,线圈,电线,完成}; main(){ 点火装置零件ip; 做{ cout>(int)ip; 交换机(ip){ 案例分配器:cout所有重载都同样糟糕;) 将是“close”,因为您无法分配给右值 然而,你知道吗 int tmp; std::cin >> tmp; ip = st
#包括
使用名称空间std;
枚举点火零件{分配器=1,盖,点,插头,冷凝器,线圈,电线,完成};
main(){
点火装置零件ip;
做{
cout>(int)ip;
交换机(ip){
案例分配器:cout所有重载都同样糟糕;)
将是“close”,因为您无法分配给右值
然而,你知道吗
int tmp;
std::cin >> tmp;
ip = static_cast<ignition_parts>(tmp);
所有重载都同样糟糕;)
将是“close”,因为您无法分配给右值
然而,你知道吗
int tmp;
std::cin >> tmp;
ip = static_cast<ignition_parts>(tmp);
建议:使用数组进行标识符到字符串的转换
std::ostream& operator<<(std::ostream& os, ignition_parts ip)
{
static const char * names[] =
{
"Nothing",
"Distribuidor", "Tampa", "Pontos", "Vela", "Condensador"
}
// Test ip for validity first.
os << names[ip];
}
在每个条目中搜索匹配的ID,然后返回表条目的name
字段
此方法的一个很好的好处是,您可以在不更改代码的情况下添加条目,并且顺序不相关(条目的顺序无关紧要)。建议:使用数组进行标识符到字符串的转换
std::ostream& operator<<(std::ostream& os, ignition_parts ip)
{
static const char * names[] =
{
"Nothing",
"Distribuidor", "Tampa", "Pontos", "Vela", "Condensador"
}
// Test ip for validity first.
os << names[ip];
}
在每个条目中搜索匹配的ID,然后返回表条目的name
字段
这种方法的一个很好的好处是,您可以在不更改代码的情况下添加条目,并且顺序是不相关的(条目的顺序无关紧要)你不应该得到多个匹配,你应该没有匹配。@克里斯,它得到了很多匹配需要/同样坏/隐式转换。欢迎来到C++地狱:)是的,是的。我的意思是,如果找到同样好的匹配,使调用变得模糊不清,编译器必须非常糟糕。“克里斯”如果它不符合语言规范,它会变得更糟糕…@sehe,语言的哪一部分说你可以做std::cin>>(int)IP,?就像是代码> STD::CIN > 2;在某种程度上。你不应该得到多个匹配,你应该没有匹配。@克里斯它需要很多匹配/需要坏/隐式转换。欢迎,C++。d匹配,从而使调用不明确。@chris如果它不符合语言规范,那就糟糕多了…@sehe,语言的哪一部分说你可以做std::cin>(int)ip;
?在某种程度上就像std::cin>>2;
。
std::ostream& operator<<(std::ostream& os, ignition_parts ip)
{
static const char * names[] =
{
"Nothing",
"Distribuidor", "Tampa", "Pontos", "Vela", "Condensador"
}
// Test ip for validity first.
os << names[ip];
}
struct Entry
{
ignition_parts part_id;
const char * name;
};
const Entry name_table[] =
{
{distributor, "Distribuidor"},
{cap, "Tampa"},
{points, "Pontos"},
{plug, "Vela"},
{condenser, "Condensador"},
};
const unsigned number_of_entries =
sizeof(name_table) / sizeof(name_table[0]);