错误:‘unique_ptr’不是‘std’的成员

64
我想这很容易理解 - 尽管我认为我已经正确设置了一切,但似乎我无法使用 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。

2
这个参考文献告诉你需要包含哪个头文件。请参考:http://en.cppreference.com/w/cpp/memory/unique_ptr - juanchopanza
3个回答

124

您需要包含头文件,在其中定义 unique_ptrshared_ptr

#include <memory>

正如你已经知道的那样,你需要使用c++11标志来编译

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

1
对不起,我对C++还不熟悉。为什么在<memory>中定义std::unique_ptr,而不是其他地方呢? - Ark-of-Ice
@AoI:"std"是命名空间。"memory"只是指示它被定义的头文件。 - JohnTortugo
一个非常好的学习资源 https://isocpp.org/blog/2015/09/quick-q-what-is-a-smart-pointer-and-when-should-i-use-one - user2235747

1

以下是我在2020年学到的内容 - memory.h位于/usr/include和/usr/include/c++/4.8.5中,需要先找到第二个。 在Eclipse中,如果需要设置路径,请使用项目 ->属性 ->路径和符号 ->包括 ->添加...路径并将其设置为第一项。


0

你需要包含 #include ,这将解决问题,至少在我的Ubuntu Linux机器上是这样的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接