error: invalid initialization of reference of type ‘std::vector<YoloDetSt>&’ from expression of type ‘__gnu_cxx::__alloc_traits<std::allocator<YoloDetSt> >::value_type {aka YoloDetSt}’
时间: 2023-12-21 19:03:42 浏览: 343
这个错误信息提示你在初始化一个类型为std::vector<YoloDetSt>的引用时出现了错误。具体来说,你可能是这样定义了一个函数:
```cpp
void foo(std::vector<YoloDetSt>& vec) {
// ...
}
```
然后在调用这个函数时,传递了一个YoloDetSt类型的变量作为参数:
```cpp
YoloDetSt det;
foo(det);
```
这样是错误的,因为YoloDetSt类型的变量不能直接转换为std::vector<YoloDetSt>类型的引用。如果你想将YoloDetSt类型的变量添加到vec中,应该这样写:
```cpp
YoloDetSt det;
std::vector<YoloDetSt> vec;
vec.push_back(det);
foo(vec);
```
注意,在这里我们首先创建了一个空的std::vector<YoloDetSt>类型的变量vec,然后使用push_back函数将det添加到vec中,最后将vec作为参数传递给foo函数。这样就可以避免上述错误。
相关问题
error: invalid initialization of reference of type 'std::vector<double>&' from expression of type 'std::vector<std::vector<double> >'
这个错误是因为你试图将一个二维vector赋值给一个一维vector的引用,导致类型不匹配。你需要将二维vector的一个子vector作为一维vector的引用来初始化。例如,如果你有一个二维vector叫做vec2d,你可以这样来初始化一个一维vector:
```
std::vector<double>& vec1d = vec2d[row_index];
```
其中row_index是你要初始化的一维vector所在的行数。这样就可以将二维vector的一行作为一维vector的引用来初始化了。
error: invalid initialization of non-const reference of type 'std::__cxx11::string& {aka std::__cxx11::basic_string<char>&}' from an rvalue of type 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' m_pMessageControl->sendIM(imInfo, std::string()); ^~~~~~~~
这个错误是因为你传递了一个临时字符串对象(rvalue)给函数中的非常量引用参数。非常量引用参数只能绑定到具有持久性的对象,而临时对象是不具有持久性的,因此编译器会报错。
为了解决这个问题,你可以将非常量引用参数改为常量引用参数,或者传递一个具有持久性的字符串对象。如果你想使用临时对象,可以将它作为函数的参数,而不是作为参数的引用。
例如,将函数声明改为以下形式之一:
```
void sendIM(IMInfo& imInfo, const std::string& message);
void sendIM(IMInfo& imInfo, std::string message);
```
或者将函数调用改为以下形式之一:
```
m_pMessageControl->sendIM(imInfo, std::string(""));
m_pMessageControl->sendIM(imInfo, "Hello, world!");
```
阅读全文