2013-08-06 423 views
31

我想這很自我解釋 - 我似乎無法使用C++ 11功能,即使我認爲我已經正確設置了所有內容 - 這可能意味着我不知道。錯誤:'unique_ptr'不是'std'的成員

這裏是我的代碼:

#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; 
} 

這裏是我的版本的G ++:

[email protected]:~/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. 

這裏是我如何編譯代碼:

[email protected]:~/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 

請注意,我已經試過-std=c++11-std=c++0x都無濟於事。

我從英特爾x64機器上的閃存驅動器運行Ubuntu 12.04 LTS。

+1

[此引用(HTTP編譯頭:// EN .cppreference.com/w/cpp/memory/unique_ptr)告訴你需要包含的頭文件。 – juanchopanza

回答

54

您需要包括其中unique_ptrshared_ptr定義

#include <memory> 

正如你已經知道你需要c++11標誌

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

對不起,我是C++新手。爲什麼它被用作std :: unique_ptr,如果它在中定義的話? –

+0

@AoI:「std」是命名空間。 「內存」只表示頭文件在哪裏定義。 – JohnTortugo

相關問題