LINUX.ORG.RU

Почему возникает ошибка при использовании make_unique() ?

 , unique, умные указатели


0

1

Подключил заголовок <memory>.

Пишу следующий код:

// В заголовке класса
unique_ptr<unsigned char> mImageData;

// В реализации
mImageData=make_unique<unsigned char>( SOIL_load_image("a.png", &w, &h, nullptr, SOIL_LOAD_RGB) );

И получаю ошибку:
Image.cpp:68:16: error: use of undeclared identifier 'make_unique'
Image.cpp:68:37: error: expected '(' for function-style cast or type construction


В то же время, код с созданием умного указателя и последующей его передачи не вызывает ошибки:
unique_ptr<unsigned char> imageData( SOIL_load_image("a.png", &w, &h, nullptr, SOIL_LOAD_RGB) );
mImageData=move(imageData);


Не могу понять, почему для make_unique() отсутсвует определение. Как сделать так, чтобы заполнение умного указателя делалось через make_unique()?

★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)

Ответ на: комментарий от Xintrea

алгоритм такой: вводишь в гугл интересующую плюсовую штуковину (c++ std::make unique), открываешь в результатах cppreference.com (обычно первый в списке) и вверху справа видишь https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique зелёным написано «since c++14)

там же выше видишь, в каком заголовночном файле определена сия сущность

очень удобно, если `man make_unique` недостаточно понятен

jeuta ★★★★
()
Ответ на: комментарий от jeuta

Операционная система: CentOS 7.

Поставил пакет c С++ документацией:

sudo yum install devtoolset-8-libstdc++-docs.x86_64

Далее набираю:

man make_unique
No manual entry for make_unique
man std::make_unique
No manual entry for std::make_unique

На зато есть `man std::unique_ptr`.

Nibbler
()
Ответ на: комментарий от jeuta

алгоритм такой: вводишь в гугл интересующую плюсовую штуковину (c++ std::make unique), открываешь в результатах cppreference.com (обычно первый в списке) и вверху справа видишь https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique зелёным написано «since c++14)

Я туда всегда в первую очередь лезу. Просто когда устаешь и начинаешь тупить, не замечаешь очевидного.

Xintrea ★★★★★
() автор топика

Потому что std::make_unique<unsigned char> ожидает либо отсутствие аргумента, либо значение unsigned char. Что возвращает SOIL_load_image?

dvetutnev
()
Ответ на: комментарий от jeuta

Упс, да. Только с четырнадцатого стандарта оно доступна.

Но это не отменяет того, что тут явная дурь написана:

make_unique<unsigned char>( SOIL_load_image("a.png", &w, &h, nullptr, SOIL_LOAD_RGB) );

dvetutnev
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.