C ++ - Нет подходящей функции-члена для вызова push_back - PullRequest
0 голосов
/ 19 апреля 2020

Я сейчас работаю над заданием в колледже и сейчас борюсь с векторами.

Я должен вернуть уникальный идентификатор для объекта и затем добавить этот объект в вектор.

Объект представляет собой структуру, определяемую следующим образом:

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

и вектор, который я пытаюсь вычислить:

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

Функция, которую я написал, выглядит следующим образом: this:

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;

Однако в строке от последней к последней, когда я пытаюсь вставить sh вершинный пуллер в вектор, я получаю ошибку - Нет соответствующей функции-члена для вызова to 'push_back' .

Я застрял на этом довольно долгое время, и я понятия не имею, что может вызвать это, вероятно, указатели, как обычно, с C и мной. Спасибо за предложения!

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Метод 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*
0 голосов
/ 19 апреля 2020

vertex_puller является функцией std::make_unique<VertexPuller>. Это не unique_ptr<VertexPuller>. Вы должны вызвать функцию и передать все параметры, которые вы передадите конструктору VertexPuller.

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