error: ‘unique_ptr’ is not a member of ‘std’

c++, c++11, g++, unique-ptr

Solution

You need to include header where `unique_ptr` and `shared_ptr` are defined

#include <memory>

As you already knew that you need to compile with `c++11` flag

g++ main.cpp -o run -std=c++11
//                  ^

Problem

I guess it's pretty self explanatory - I can't seem to use C++11 features, even though I think I have everything set up properly - which likely means that I don't. Here's my code: ``` #include <cstdlib> #include <iostream> class Object { private: int value; public: Object(int val) { value = val; } int get_val() { return value; } void set_val(int val) { value = val; } }; int main() { Object *obj = new Object(3); std::unique_ptr<Object> smart_obj(new Object(5)); std::cout << obj->get_val() << std::endl; return 0; } ``` Here's my version of g++: ``` ubuntu@ubuntu:~/Desktop$ g++ --version g++ (Ubuntu/Linaro 4.7.3-2ubuntu1~12.04) 4.7.3 Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ``` Here's how I'm compiling the code: ``` ubuntu@ubuntu:~/Desktop$ g++ main.cpp -o run --std=c++11 main.cpp: In function ‘int main()’: main.cpp:25:2: error: ‘unique_ptr’ is not a member of ‘std’ main.cpp:25:24: error: expected primary-expression before ‘>’ token main.cpp:25:49: error: ‘smart_obj’ was not declared in this scope ``` Note that I've tried both `-std=c++11` and `-std=c++0x` to no avail. I'm running Ubuntu 12.04 LTS from a flash drive on an Intel x64 machine.

Original source