Невозможно собрать программу gtkmm, которая использует std :: make_unique - PullRequest
0 голосов
/ 10 октября 2018

Я уже некоторое время программирую, используя 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 голосов
/ 18 октября 2018

Возможно, у вас возникла проблема со стандартом C ++, который указан аргументом --cflags в pkg-config gtkmm-3.0 --cflags --lib.Если -std=c++11 или что-то более старое является результатом предоставления опции --cflags, то он переопределит все более ранние спецификации.Вероятно, вы можете решить проблему, просто поместив желаемую спецификацию в конце:

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