我遇到下面的代码问题,它会产生错误,我相信是因为显然" auto"不能根据条件处理几种类型的退货。 这是我的代码的情况还是其他什么问题? 另外,如果我想做的事情不可能这样,那么可以用其他任何方式吗?
auto Game_Manager::getMember(string s)
{
if (s == "rows")return rows; // return unsigned
else if (s == "columns")return columns; // return unsigned
else if (s == "p1")return p1; //return string
else if (s == "p2")return p2; //return string
else cout << "\n\nERROR!!! Invalid argument for getMember()\n\n" << endl;
return 1;
}
答案 0 :(得分:2)
这里是感兴趣的规则(来自标准的第7.1.6.4节)
如果具有包含占位符类型的声明返回类型的函数具有多个
return
语句,则会为每个return
语句推导出返回类型。 如果推断的类型在每次扣除中不相同,则该程序格式不正确。
因此,所有return语句必须具有相同的类型。
答案 1 :(得分:1)
auto
表示“为我设计类型”,而非“接受任何类型”。没有(内置)类型可以声明此函数,因此auto
无效