web-dev-qa-db-ja.com

エラー:「unique_ptr」は「std」のメンバーではありません

私はそれはかなり自明であると思います-私はすべてが適切に設定されていると思いますが、私はそうではないことを意味する可能性が高いにもかかわらず、C++ 11の機能を使用することはできないようです。

私のコードは次のとおりです。

#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 ++​​です。

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.

コードのコンパイル方法は次のとおりです。

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

両方の-std=c++11および-std=c++0x 無駄に。

Intel x64マシンのフラッシュドライブからUbuntu 12.04 LTSを実行しています。

48
stellarossa

unique_ptr および shared_ptr が定義されているヘッダーを含める必要があります

#include <memory>

c++11フラグを使用してコンパイルする必要があることを既に知っているように

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