61

我想这是不言自明的——我似乎无法使用 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 ‘&gt;’ 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。

4

3 回答 3

120

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

#include <memory>

如您所知,您需要使用c++11标志进行编译

g++ main.cpp -o run -std=c++11
//                  ^
于 2013-08-06T10:52:54.177 回答
0

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

于 2021-03-31T18:57:30.123 回答
0

所以在这里我在 2020 年学到的东西 - memory.h 位于 /usr/include 和 /usr/include/c++/4.8.5 中,您需要在第一个之前找到第二个。在 Eclipse 中,如果需要,使用 Project->Properties->Path and Symbols->Includes->Add... path 设置顺序并首先设置

于 2020-03-17T15:38:38.820 回答