invalid initialization of reference of type 'std::__cxxll::list<int>&' from expression of type 'std::__cxxll::list<int*>'
时间: 2024-01-20 16:02:33 浏览: 126
这个错误的原因是你在将一个 `std::list<int*>` 类型的对象赋值给了一个类型为 `std::list<int>&` 的引用,两种类型是不一样的。`std::list<int*>&` 表示一个存储了 `int*` 类型指针的链表,而 `std::list<int>&` 表示一个存储了 `int` 类型的链表。如果你想要将 `std::list<int*>` 转换为 `std::list<int>`,你需要使用循环将其元素逐个拷贝到新的链表中,或者使用 `std::transform` 算法和一个 lambda 函数来完成。
相关问题
[Error] invalid initialization of reference of type 'std::queue<NodeType>&' from expression of type 'std::priority_queue<NodeType>'
这个错误表示你在某个地方试图将类型为 `std::priority_queue<NodeType>` 的表达式赋值给类型为 `std::queue<NodeType>&` 的引用,这是不允许的,因为它们是不同的类型。
`std::priority_queue` 和 `std::queue` 是两个不同的容器类型,它们的实现方式也不同。`std::priority_queue` 是一个基于堆的容器,用于存储元素,并按一定的优先级进行排序。而 `std::queue` 是一个队列容器,在队尾添加元素,在队头取出元素。
如果你想将一个 `std::priority_queue` 赋值给一个 `std::queue` 引用,你需要手动将其转换为一个 `std::queue`。你可以使用 `std::deque` 作为 `std::queue` 的底层容器,并将 `std::priority_queue` 中的元素依次插入到 `std::deque` 中,从而得到一个 `std::queue`。示例代码如下:
```cpp
std::priority_queue<NodeType> pq;
// ...
std::deque<NodeType> dq(pq.c.begin(), pq.c.end());
std::queue<NodeType>& q = dq;
```
这里我们使用了 `pq.c.begin()` 和 `pq.c.end()` 来获取 `std::priority_queue` 中的底层容器 `std::vector` 的迭代器,然后将其作为参数传递给 `std::deque` 的构造函数,从而得到一个 `std::deque`。最后,我们将 `std::deque` 赋值给 `std::queue` 的引用即可。
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}’
这个错误信息提示你在初始化一个类型为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函数。这样就可以避免上述错误。
阅读全文