Ошибка компиляции 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

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

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

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