错误:'unique_ptr'不是'std'的成员

时间:2013-08-06 10:52:25

标签: c++ c++11 g++ unique-ptr

我想它是非常自我解释的 - 我似乎无法使用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。

3 个答案:

答案 0 :(得分:77)

您需要在unique_ptrshared_ptr定义的位置包含标题

#include <memory>

您已经知道需要使用c++11标志

进行编译
g++ main.cpp -o run -std=c++11
//                  ^

答案 1 :(得分:0)

因此,这是我在2020年学到的-memory.h位于/ usr / include和/usr/include/c++/4.8.5中,您需要在第二个之前找到第二个。 在Eclipse中,根据需要使用Project-> Properties-> Path and Symbols-> Includes-> Add ...路径设置顺序,然后先设置

答案 2 :(得分:0)

你需要包含 #include 来解决问题,至少在我的 ubunto linux 机器上