Ошибка компиляции C ++: 'std :: vector' не имеет члена "Emplace" в функции шаблонаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка компиляции C ++: 'std :: vector' не имеет члена "Emplace" в функции шаблона

Сообщение Anonymous »

Я работаю над проектом C ++ и сталкиваюсь с ошибкой компиляции, связанной с Std :: ecect :: emplace . Я пытаюсь использовать emplace в функции шаблона, но я получаю ошибку: 'std :: vector' не имеет члена с именем 'emplace' .
Вот минимальный воспроизводимый пример:

#include
#include

template
void addElement(std::vector& vec, T&& value) {
// Try to use emplace to add the element
vec.emplace(vec.end(), std::forward(value));
}

int main() {
std::vector numbers;
addElement(numbers, 42);

for(const auto& num : numbers) {
std::cout

Код: Выделить всё

:5:39: error: expected ',' or '...' before '&&' token
void addElement(std::vector& vec, T&& value) {
^
: In function 'void addElement(std::vector&, T)':
:7:28: error: 'forward' is not a member of 'std'
vec.emplace(vec.end(), std::forward(value));
^
:7:42: error: expected primary-expression before '>' token
vec.emplace(vec.end(), std::forward(value));
^
:7:44: error: 'value' was not declared in this scope
vec.emplace(vec.end(), std::forward(value));
^
: In function 'int main()':
:14:21: error: ISO C++ forbids declaration of 'num' with no type [-fpermissive]
for(const auto& num : numbers) {
^
:14:27: error: range-based 'for' loops are not allowed in C++98 mode
for(const auto& num : numbers) {
^
: In instantiation of 'void addElement(std::vector&, T) [with T = int]':
:12:27:   required from here
:7:5: error: 'class std::vector' has no member named 'emplace'
vec.emplace(vec.end(), std::forward(value));
^
Я в замешательстве, потому что ссылка на C ++ говорит, что std :: vector должен иметь метод Emplace . Что я делаю не так? Является ли это проблемой компилятора или мое использование неверно? /> < /li>
Я попытался использовать emplace_back < /code> вместо этого, который работал: < /p>
< /li>
< /ol>

Код: Выделить всё

vec.emplace_back(std::forward(value));
< /code>

 Я также попытался добавить флаг C ++ 11 при составлении: < /li>
< /ol>
g++ -std=c++11 main.cpp -o main
Это исправило проблему, позволяя мне использовать метод Emplace . Я ожидал, что Emplace будет работать, аналогичная INSERT , но с эффективностью конструирования элемента на месте, а не копировать или перемещать его.


Подробнее здесь: https://stackoverflow.com/questions/796 ... template-f
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»