操作员过载不明确>&燃气轮机; 我开始学习C++,我找不到下面的错误原因。这个代码在“自学C++”的书中。

操作员过载不明确>&燃气轮机; 我开始学习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

main.cpp:13:错误:“std::cin>>(int)ip”中的“operator>>”重载不明确

#包括
使用名称空间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]);