0

我一直在使用 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 并得到了同样的错误。

4

1 回答 1

0

您可能遇到了--cflagspkg-config gtkmm-3.0 --cflags --lib. 如果-std=c++11提供选项的结果是旧的或旧的东西--cflags,那么它将覆盖任何早期的规范。您可能只需将所需的规范放在最后即可解决问题:

g++ main.cpp `pkg-config gtkmm-3.0 --cflags --libs` -std=c++14
于 2018-10-18T01:43:49.803 回答