编译错误:(警告:控制到达非空函数 [-wreturn 类型] 的末尾)



当我尝试使用以下命令编译我的代码时:g++ -Wall -std=c++11 -o test10 program10.cpp发生这种情况:

program10.cpp: In function 'int getInt(std::string)':
program10.cpp:76:1: warning: control reaches end of non-void function [-Wreturn-type]

这是代码:

int getInt(string str) {
string bin[] = {"11000", "00011", "00101", "00110", "01001",
"01010", "01100", "10001", "10010", "10100"};
for (int i = 0; i < 10; i++) {
if (str.compare(bin[i]) == 0) {
return i;
}
}
}

如果数组中没有一个字符串与函数的参数字符串匹配,则函数将永远不会返回任何内容,即使它应该返回一个 int。我建议返回类似 -1 的内容作为函数的最后一个语句,以指示何时发生这种情况。

编译器简洁地解释了您的警告。仅当找到bin数组中的一个字符串时,代码才会到达您的return语句。这是您应该首选单个退出点的众多原因之一(这样可以提高可读性,不会导致此警告,并且更易于调试)。 您还应该优先传递非 POD 类型作为函数参数的引用。

int getInt(string & str)
{
int ret(-1); // bias to error
string bin[] = {"11000", "00011", "00101", "00110", "01001",
"01010", "01100", "10001", "10010", "10100"};
for (int i = 0; i < 10; i++) {
if (str.compare(bin[i]) == 0) {
ret = i; // success!
}
}
return ret;
}

最新更新