Создание unique_ptr непрозрачных данных в C++

Конструкторы ptr работают с простыми данными, но не работают с объектами:

#include <string>
#include <memory>

struct MyClass{};

int main() {

    std::unique_ptr<int> ptr(new int(5));
    std::unique_ptr<std::string> ptr1(new std::string("string")); //function 'ptr1' could not be resolved.
    std::unique_ptr<MyClass> ptr2(new MyClass); //unction 'ptr2' could not be resolved.
    return 0;
}

Зачем?

Моя версия g++ (Ubuntu/Linaro 4.7.3-2ubuntu1~12.04) 4.7.3

2 ответа

Решение

Вы упомянули, что в eclipse происходит сбой, поэтому вы можете попробовать отключить проверку внутреннего кода eclipse:

собираюсь в свойствах проекта -> C/C++ Общие -> Анализ кода -> проверка Use project settings а затем в Syntax and Semantic Errors снимите все строки ошибок.

Возможно, вам придется удалить предыдущие ошибки из вывода, просто выбрав их и удалив.

На самом деле есть одна строка с шаблоном 'Function ''{0}'', которая не может быть разрешена', обычно g++ не выдает такую ​​ошибку (я, по крайней мере, никогда не видел такой)

На самом деле эти инициализации работают просто отлично - следующий код прекрасно компилируется, например, с g++ 4.8.2:

#include <memory>
#include <string>

struct MyClass { };

int main()
{
    std::unique_ptr<int> ptr(new int(5));
    std::unique_ptr<std::string> ptr1(new std::string("string"));
    std::unique_ptr<MyClass> ptr2(new MyClass);
}
Другие вопросы по тегам