我查看了过去的几个问题(例如no instance of overloaded function),但这些问题都不相关。我知道类型不匹配,但是我不明白为什么在我的设置中出现此错误。
我收到此错误:
没有重载函数“ std :: vector <_Tp,_Alloc> :: push_back [with _Tp = int,_Alloc = std :: allocator
]”的实例与参数列表和对象匹配(该对象具有类型限定符阻止匹配的项)-参数类型是(int)-对象类型是:const std :: vector >
这是代码:
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);
}
}
}
注意:我不会将int
推入sorted_edges
中-我正在测试以查看是否错误地创建了边缘结构,或者是否错误地使用了矢量。
答案 0 :(得分:5)
关于您得到的错误:
...对象具有防止匹配的 类型限定符 -参数类型为:(int)-对象类型为: const std :: vector。
首先,您应该检查发布的代码是否正确-您声明它是非常量,但错误明确指出否则,尽管您可能将其作为常量传递给函数ref-这是一种可能性。
在任何情况下,您都不能push_back
进入const vector
,因为它是const
:-)
您可以通过以下代码看到它:
#include <vector>
int main() { XYZZY std::vector<int> x; x.push_back(42); }
当您使用-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); }
^