无法push_back到向量-没有重载错误

时间:2018-11-30 00:48:35

标签: c++ vector

我查看了过去的几个问题(例如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中-我正在测试以查看是否错误地创建了边缘结构,或者是否错误地使用了矢量。

1 个答案:

答案 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); }
                                                         ^