我查看了几个过去的问题(例如没有重载函数的实例),但这些问题并不相关.我知道存在类型不匹配但我不明白为什么,在我的设置中,我收到此错误.
我收到这个错误:
没有重载函数的实例"std :: vector <_Tp,_Alloc> :: push_back [with _Tp = int,_Alloc = std :: allocator <int>]"匹配参数列表和对象(该对象具有阻止a的类型限定符匹配) - 参数类型是:(int) - 对象类型是:const std :: vector <int,std :: allocator <int >>
这是代码:
std::vector<int> sorted_edges;
...
//let's sort the edges
for(int i = 0; i < num_nodes; ++i){
for(int j = 0; j < num_nodes; ++j){
if(graph[i][j] != INF){
sorted_edges.push_back(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我不打算int进入sorted_edges- 我正在测试我是否错误地创建了我的边缘结构或者我是否正在使用向量错误.
关于你得到的错误:
...对象具有阻止匹配的类型限定符 - 参数类型为:(int) - 对象类型为:const std :: vector.
首先,你应该检查你发布的代码是否正确 - 你说它是非const的但是错误清楚地说明了,尽管你可能将它作为const ref传递给函数 - 这是一种可能性.
在任何情况下,你都不能push_back进入,const vector因为它,嗯,const:-)
您可以使用以下代码查看:
#include <vector>
int main() { XYZZY std::vector<int> x; x.push_back(42); }
Run Code Online (Sandbox Code Playgroud)
当你编译-DXYZZY=(所以XYZZY有效地消失),它编译好.随着-DXYZZY=const然而,你会得到一个错误:
qq.cpp: In function ‘int main()’:
qq.cpp:2:54: error: passing ‘const std::vector<int>’ as ‘this’
argument discards qualifiers [-fpermissive]
int main() { XYZZY std::vector<int> x; x.push_back(42); }
^
Run Code Online (Sandbox Code Playgroud)