Создание 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);
}