列表迭代器与无序映射不兼容
list iterators not compatible unordered_map
我有一个相当大的项目,它实现了Dijkstra的算法来模拟网络发送数据包,我遇到了以前从未见过的问题;
我已经设法将问题缩小到这个范围:
//Member function of vertex
unordered_map<Vertex *, int> getEdges()
{
return _edges; //same data type as return type
}
//Call to member function
Vertex *t = //Arbitrary vertex
unordered_map<Vertex*, int> edges = t->getEdges();
由于某种原因,在调用此函数时,我收到错误"list迭代器不兼容"。有人明白为什么会发生这种事吗?
编辑:暂时删除
第2版:事实证明,由于我在最后一分钟做了更改,我从getEdges()返回了一个空的无序映射。显然,这会导致"列表迭代器不兼容"。
为了让其他人从我的错误中吸取教训,我会稍后将代码上传到一个更永久的位置。
由于最后一分钟的更改,我从getEdges()返回了一个空的无序映射。显然,这会导致"列表迭代器不兼容"。
以下代码适用于我在NetBeans中使用的C++11。请记住,我使用的值是任意的,当然我已经对每个顶点进行了硬编码,以返回任意的新边(我认为您会更改)。。
using namespace std;
struct Vertex{
//Member function of vertex
unordered_map<Vertex*, int> getEdges()
{
unordered_map<Vertex*, int> v;
std::pair<Vertex*, int> first (new Vertex(), 0);
std::pair<Vertex*, int> second (new Vertex(), 1);
std::pair<Vertex*, int> third (new Vertex(), 2);
std::pair<Vertex*, int> fourth (new Vertex(), 3);
v.insert(first);
v.insert(second);
v.insert(third);
v.insert(fourth);
return v; //same data type as return type
}
};
int main(int argc, char** argv)
{
Vertex t;
//Call to member function
unordered_map<Vertex*, int> edges = t.getEdges();
cout << "edges " << edges.size();
// clean up
edges.clear();
return 0;
}
相关文章:
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 字符类型转换不兼容
- Qt:如何使不兼容的发送方/接收方参数兼容?
- 视觉工作室 2017;启用 /permissive 时,类型 "const wchar_t *" 的参数与类型 "PWSTR" 的参数不兼容
- 使用不兼容的分配器复制分配无序列图
- 类中的C++映射不会保存新键
- C++映射不删除元素
- 类型为 "int*" 的参数与 C++ 中错误类型"int**"参数不兼容
- 该对象具有与成员函数不兼容的类型限定符.为什么会出现此错误?
- 我正在尝试将表的地址传递给要在另一个函数中使用的指针,但得到不兼容的指针类型
- 为什么范围算法与 std 的迭代器不兼容?
- Winpcap Findalldevs const char * 与 char * 不兼容
- C++ 类型的参数与 void (__cdecl*)(void) 类型的参数不兼容,当调用 std::atexit()
- 将"std::string {aka std::basic_string}"赋值中的不兼容类型<char>
- 如何在C++中停止调用不兼容的方法?
- 映射/集合迭代器不兼容-检查对象是否在映射中
- 映射/集合迭代器不兼容-检查映射中是否存在键
- Boost管理的映射文件:在OSX和Linux之间不兼容
- 列表迭代器与无序映射不兼容
- 映射/设置迭代器不兼容[c++]