错误: 在有返回值的函数中,控制流程到达函数尾 [-Werror=return-type] 36 | Result triggerbase; | ^~~~~~~~~~~ cc1plus:有些警告被当作是错误
时间: 2024-11-13 09:17:59 浏览: 53
这个错误提示意味着在C++中,你有一个声明为具有返回值的函数,但是在函数体的结尾处并没有明确地返回一个值。当你使用`-Werror=return-type`编译选项时,GCC(或其他C++编译器)将这类未显式返回的情况视为严重的错误,而不是通常的警告。
具体到这段代码,`Result triggerbase;` 可能是一个意图返回`Result`类型的结果变量,但是函数没有明确地通过`return`语句返回这个结果给调用者。解决这个问题的方法是,在函数尾部添加`return triggerbase;`,这样就明确告诉编译器你要返回什么。
示例修复后的代码可能如下所示:
```cpp
Result Subscriber::AddSubscriber(const TriggerType &trigger_type, TriggerIvsFunc &on_message) {
if (trigger_type != en_ALG_PLATE_VIRTUALLOOP) {
return VZERROR_NEWF("trigger_type:%d != en_ALG_PLATE_VIRTUALLOOP:%d", trigger_type, en_ALG_PLATE_VIRTUALLOOP);
}
ivs_consumers_[trigger_type].push_back(on_message);
// 添加 return 语句
return triggerbase;
}
```
相关问题
Line 8: Char 5: error: non-void function does not return a value [-Werror,-Wreturn-type] 8 | } | ^ 1 error generated.
这是一条编译错误提示,指出第8行有一个非空函数(non-void function),但没有显式地返回值。在C/C++中,函数若声明为非空(即`void`类型),则需要在最后自动隐式返回`void`。然而,如果你的函数确实需要返回某种类型的值,比如`int`、`string`等,那么你需要明确地在其末尾添加返回语句,将计算结果返回。
例如,如果你有一个函数是应该返回整数的,但在第8行结束并没有提供返回值,编译器会报错。修复这个错误的示例代码可能是这样的:
```c++
int calculateSomething() {
//... 这里做一些操作
int result = 42; // 或者其他计算得到的结果
return result; // 显式返回结果
}
// 或者
bool isTrueOrFalse() { // 如果返回的是布尔值
//... 运行一些判断
if (condition) {
return true;
} else {
return false;
}
}
```
在上述例子中,`calculateSomething` 和 `isTrueOrFalse` 都是显式地在最后返回了它们的结果。
device/hisilicon/bigfish/hippo/include/hi_mw_log.h:77:53: note: expanded from macro 'LOGI' #define LOGI(...) ((void)LOG(ATV_LOG_INFO, LOG_TAG, __VA_ARGS__)) ^~~~~~~~~~~ device/hisilicon/bigfish/hippo/include/hi_mw_log.h:122:33: note: expanded from macro 'LOG' atv_printLog(priority, tag, __VA_ARGS__) ^~~~~~~~~~~ device/hisilicon/bigfish/hippo/include/hi_mw_log.h:131:56: note: expanded from macro 'atv_printLog' HiLog::PrintLog(prio, tag, __FUNCTION__, __LINE__, fmt) ^~~ device/hisilicon/bigfish/hippo/vendor/ZYCustom/modules/Orientation.cpp:319:14: warning: expression result unused [-Wunused-value] for(i;i<=sizeof(accelerations_mean_array)/sizeof(accelerations_mean_array[0]);i++){ ^ device/hisilicon/bigfish/hippo/vendor/ZYCustom/modules/Orientation.cpp:319:17: warning: comparison of integers of different signs: 'int' and 'unsigned int' [-Wsign-compare] for(i;i<=sizeof(accelerations_mean_array)/sizeof(accelerations_mean_array[0]);i++){ ~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ device/hisilicon/bigfish/hippo/vendor/ZYCustom/modules/Orientation.cpp:337:1: error: control may reach end of non-void function [-Werror,-Wreturn-type]
这是一段代码的编译警告和错误信息。
首先是一个宏定义,展开后是打印Log信息的函数调用,其中第一个参数是Log的等级,第二个参数是Log的Tag,后面的__VA_ARGS__是可变参数,表示需要打印的Log信息。
接下来是一个for循环,其中i的类型为int,在循环条件中使用了sizeof操作符获取数组长度,需要注意sizeof的返回值类型是unsigned int,导致了类型不匹配,编译器给出了警告。
最后是一个函数定义,编译器提示该函数可能没有返回值,需要加上返回值或者在函数结尾加上return语句。
阅读全文