Неожиданная структура при использовании GPGME в приложении C++

Я хотел бы использовать GPGME для генерации ключей и шифрования в моем приложении C++. Однако, пытаясь начать, я застрял с проблемой:

Я загрузил пакет dev для своей системы Debian. Я сказал своему компилятору как найти библиотеку. Просто чтобы посмотреть, смогу ли я инициализировать библиотеку (упомянутый здесь) Я пытаюсь выполнить следующий код..:

//--- Main.cpp---

#include <locale.h>
#include <gpgme.h> 

int main(){
       /* Initialize the locale environment.  */
  setlocale (LC_ALL, "");
  gpgme_check_version (NULL);
  gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
#ifdef LC_MESSAGES
  gpgme_set_locale (NULL, LC_MESSAGES, setlocale (LC_MESSAGES, NULL));
#endif
    return 0;
}

линия

gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));

подчеркнуто красным создателем qt. Сообщение

ожидаемый токен ';' получил «структуру»

Но почему?


JFYI

В качестве синопсиса моей более ранней проблемы мои CMakeLists выглядят так:

Мой основной файл CMakeLists.txt в корневом каталоге моего проекта:

//...
include(FeatureSummary)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
find_package(Gpgme)

# Additional include directories
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}                  
                    ${GPGME_INCLUDES}
)

ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/application/framework/impl)

И файл CMakeLists.txt в подкаталоге application/framework/impl:

# Define name of component
SET(COMPONENT_NAME framework)

# Define set of source files for library
SET(comp_src
      //... well, the sources
)

add_executable(${COMPONENT_NAME} ${comp_src})
target_link_libraries(${COMPONENT_NAME} ${GPGME_VANILLA_LIBRARIES})

ОБНОВЛЕНИЕ

Если я не рекомендую строку

//gpgme_check_version (NULL);

сообщение исчезает. Я проверил документацию. Сигнатура метода должна быть действительной. Может быть, что-то не так с версией библиотеки, которую я использую?


ИЗМЕНИТЬ:

Это не ошибка компилятора, а просто красная метка, поставленная создателем qt. Я бы предположил, что это должно быть вызвано опечаткой или чем-то еще. Но я не вижу никакой опечатки. Более того, приложение компилируется и запускается, даже если я не закомментировал строку check_version.


person little_planet    schedule 05.01.2016    source источник
comment
Приложение состоит только из GpgmeTest.cpp и main.cpp (который включает GpgmeTest). -- значит, main.cpp включает GpgmeTest.cpp? Это явно неправильно. Пожалуйста, сначала попытайтесь понять основы заголовков и источников: cplusplus.com/forum/articles/10627   -  person kfunk    schedule 06.01.2016
comment
Я знаю разницу между заголовочными и исходными файлами и знаю, как их использовать. Но все приложение состоит всего из 15 строк кода. Я скопировал код инициализации в основной и отредактировал свой вопрос.   -  person little_planet    schedule 06.01.2016
comment
Нужна ли вообще отдельная функция или можно переместить код в main()? Там есть два вызова функций, какой из двух вызовов вызывает ошибку компилятора? Что, если вы сначала сохраните параметры во временных файлах? Я уверен, что заголовок отсутствует, и если бы вы потратили время на создание минимального примера, вы пришли бы к такому же выводу.   -  person Ulrich Eckhardt    schedule 06.01.2016
comment
gpgme_check_version вызывает ошибку. Я обновил свой вопрос. Также я попытался переместить код в основную функцию. Ошибка такая же. Ожидаемый токен ';' получил «структуру»   -  person little_planet    schedule 06.01.2016
comment
Опубликуйте полный вывод ошибок компилятора (с информацией о строке и столбце). И, пожалуйста, постарайтесь сначала уделить некоторое время самостоятельному пониманию и решению проблем.   -  person kfunk    schedule 06.01.2016
comment
@kfunk На самом деле это не ошибка компилятора. Это просто «выделение» или отметка в моем создателе qt, которая дает мне упомянутый вывод, если я наведу курсор на отметку. Я протестировал пример, представленный на этой странице. Он компилируется и работает нормально. Ну, это не дает никакого вывода для ключей. Но раньше я не генерировал никаких ключей, так что, думаю, все в порядке. Однако в этом примере также появляется красная метка.   -  person little_planet    schedule 06.01.2016