无法构建使用std :: make_unique的gtkmm程序

时间:2018-10-09 23:54:38

标签: c++ c++14 gtkmm gtkmm3

我已经使用Gtkmm编程了一段时间了,使用C ++ 11功能没有问题。今天,我使用C ++ 14功能std::make_unique添加了一行代码,并遇到了编译器错误。起初,我以为我的构建配置有问题,但经过一些测试,我将其范围缩小到了Gtkmm。这是在我的系统上可以正常运行的代码:

构建命令:

g++ -std=c++14 main.cpp

代码:

#include <memory>

int main()
{
    std::unique_ptr<int> intPtr;
    intPtr = std::make_unique<int>(3);

    return 0;
}

如果我切换到此构建命令:

g++ -std=c++14 main.cpp `pkg-config gtkmm-3.0 --cflags --libs`

该代码不再生成。我收到以下错误:

main.cpp: In function ‘int main()’:
main.cpp:7:14: error: ‘make_unique’ is not a member of ‘std’
     intPtr = std::make_unique<int>(3);
              ^
main.cpp:7:31: error: expected primary-expression before ‘int’
     intPtr = std::make_unique<int>(3);

Gtkmm有什么问题?供您参考,我正在使用g ++ v 5.4.0和gtkmm 3.0。

编辑:似乎这与C ++ 14不相关。我尝试使用其他C ++ 14功能(例如[[DEPRECATED]])进行构建,并且工作正常。也许只有标准库...我也尝试过切换到g ++ 7并遇到相同的错误。

1 个答案:

答案 0 :(得分:0)

您可能会遇到--cflagspkg-config gtkmm-3.0 --cflags --lib参数指定的C ++标准的问题。如果提供-std=c++11选项导致--cflags或更旧,那么它将覆盖所有早期的规范。您只需将所需的规范放在最后,就可以解决问题:

g++ main.cpp `pkg-config gtkmm-3.0 --cflags --libs` -std=c++14