C++ - 没有匹配的成员函数调用“push_back”

Posted

技术标签:

【中文标题】C++ - 没有匹配的成员函数调用“push_back”【英文标题】:C++ - No matching member function for call to 'push_back' 【发布时间】:2020-04-19 15:20:33 【问题描述】:

我目前正在完成一项大学作业,现在我正在努力解决向量问题。

我应该返回一个对象的唯一 ID,然后将该对象添加到向量中。

对象是一个结构体,定义如下:

struct VertexPuller
    std::vector<InVertex> head_settings;
    std::vector<IndexType> indexing;
;

我要推送的向量是:

std::vector<std::unique_ptr<VertexPuller>> vertex_puller_tables;

我写的函数是这样的:

auto vertex_puller= std::make_unique<VertexPuller>;
auto vp_id = reinterpret_cast<VertexPullerID>(vertex_puller);

vertex_puller_tables.push_back(std::move(vertex_puller));

return vp_id;

但是在倒数第二行,当我尝试将顶点拉出器推入向量时,我收到错误 - No matching member function for call to 'push_back'。。 p>

我已经被困在这个问题上很长一段时间了,我不知道是什么原因造成的,可能是指针,就像 C 和我一样。 感谢您的建议!

【问题讨论】:

reinterpret_cast&lt;VertexPullerID&gt;(vertex_puller) - 你觉得这有什么作用?你是reinterpret_caststd::unique_ptr 到你的VertexPullerID 班级。 【参考方案1】:

方法push_back就在那里。您发送的类型可能不匹配。尝试阅读编译错误并找出预期的类型以及发送的实际类型。

同样错误的更简单的例子:

int main()  
    std::vector<int> vec;
    vec.push_back("hey");

编译错误是:

error: no matching function for call to `push_back`

但是,如果我们进一步阅读,它会说:

main.cpp:6:24: error: no matching function for call to 'push_back(const char [4])'
    6 |     vec.push_back("hey");
      |                        ^
In file included from /usr/local/include/c++/9.2.0/vector:67,
                 from main.cpp:2:
/usr/local/include/c++/9.2.0/bits/stl_vector.h:1184:7: note: candidate: 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = int; _Alloc = std::allocator<int>; std::vector<_Tp, _Alloc>::value_type = int]' <near match>
 1184 |       push_back(const value_type& __x)
      |       ^~~~~~~~~
/usr/local/include/c++/9.2.0/bits/stl_vector.h:1184:7: note:   conversion of argument 1 would be ill-formed:
main.cpp:6:19: error: invalid conversion from 'const char*' to 'std::vector<int>::value_type' aka 'int' [-fpermissive]
    6 |     vec.push_back("hey");
      |                   ^~~~~
      |                   |
      |                   const char*
In file included from /usr/local/include/c++/9.2.0/vector:67,
                 from main.cpp:2:
/usr/local/include/c++/9.2.0/bits/stl_vector.h:1200:7: note: candidate: 'void std::vector<_Tp, _Alloc>::push_back(std::vector<_Tp, _Alloc>::value_type&&) [with _Tp = int; _Alloc = std::allocator<int>; std::vector<_Tp, _Alloc>::value_type = int]' <near match>
 1200 |       push_back(value_type&& __x)
      |       ^~~~~~~~~
/usr/local/include/c++/9.2.0/bits/stl_vector.h:1200:7: note:   conversion of argument 1 would be ill-formed:
main.cpp:6:19: error: invalid conversion from 'const char*' to 'std::vector<int>::value_type' aka 'int' [-fpermissive]
    6 |     vec.push_back("hey");
      |                   ^~~~~
      |                   |
      |                   const char*

【讨论】:

【参考方案2】:

vertex_puller 是一个std::make_unique&lt;VertexPuller&gt; 函数。这不是unique_ptr&lt;VertexPuller&gt;。您必须调用该函数并将您将传递给VertexPuller 构造函数的所有参数传递给。

auto vertex_puller= std::make_unique<VertexPuller>(); // note the parentheses

【讨论】:

谢谢,这有帮助!对我来说这是多么愚蠢的错误。也感谢其他建议。

以上是关于C++ - 没有匹配的成员函数调用“push_back”的主要内容,如果未能解决你的问题,请参考以下文章

没有匹配的成员函数调用“擦除”

没有匹配的成员函数调用 child.value

C++ [错误] 没有匹配的调用函数

C++中的派生类,可以不定义对象直接调用基类的成员和调用自己的成员函数嘛???

错误:在 C++ 中没有用于调用构造函数的匹配函数

c++ 错误:没有匹配的函数用于从函数内调用“getline”,但在 main 中有效