我已经使用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并遇到相同的错误。
答案 0 :(得分:0)
您可能会遇到--cflags
中pkg-config gtkmm-3.0 --cflags --lib
参数指定的C ++标准的问题。如果提供-std=c++11
选项导致--cflags
或更旧,那么它将覆盖所有早期的规范。您只需将所需的规范放在最后,就可以解决问题:
g++ main.cpp `pkg-config gtkmm-3.0 --cflags --libs` -std=c++14