CLion Создание неизвестной структуры без ссылки, но компилируется нормально

Я пытался настроить свой проект cmake с помощью HDF5 в Windows 10 (64-разрядная версия), используя редактор CLion и MinGW. После уймы времени, пытаясь правильно настроить файл CMakeLists, у меня что-то работает — код компилируется, никаких ошибок от mingw32-make или от cmake. Тем не менее, я все еще получаю красные подчеркнутые ошибки в CLion, которые, похоже, не влияют на сборку, но у меня такое ощущение, что они там, потому что я сделал что-то неправильное. (Я очень новичок, делаю что-то большее, чем классовые проекты с С++)

Вот мой CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

project(testProject)
add_definitions(-std=c++11)
set(SOURCE_FILES hdf_example.cpp)

link_libraries("C:/Program Files/HDF_Group/HDF5/1.8.16/lib/hdf5_hl_cpp-shared.lib"
               "C:/Program Files/HDF_Group/HDF5/1.8.16/lib/hdf5_cpp-shared.lib"
               "C:/Program Files/HDF_Group/HDF5/1.8.16/lib/hdf5-shared.lib")

add_executable (abc hdf_example.cpp)

введите описание изображения здесь

Компиляция этого из командной строки с помощью mingw32-make или в среде IDE приводит к успешной компиляции без каких-либо ошибок или предупреждений, которые я вижу.

C:\Users\Me\Documents\project_name\temp-build\src\abc>mingw32-make
[ 50%] Building CXX object src/s3/CMakeFiles/abc.dir/hdf_example.cpp.obj
[100%] Linking CXX executable abc.exe
[100%] Built target abc

Это то, о чем я должен беспокоиться? Или я должен просто игнорировать это, так как все компилируется?


person TomW    schedule 26.01.2016    source источник
comment
Как насчет повторения сборки в терминале/cmd? Создайте где-нибудь каталог build, введите cmake path_to_source, а затем make   -  person Severin Pappadeux    schedule 30.01.2016
comment
Я сделал это - никаких предупреждений или ошибок. Как при ручном использовании cmake, так и при нажатии кнопки запуска в CLion я могу скомпилировать и запустить без проблем, это просто представление редактора в CLion, которое думает, что есть проблема   -  person TomW    schedule 31.01.2016


Ответы (3)


У меня была эта проблема, и я решил ее, поместив #include <getopt.h> выше #include <unistd.h> в файл C. Это можно рассматривать как ошибку в CLion. Для этого я создал проблему. Обходной путь на данный момент состоит в том, чтобы изменить порядок импорта.

Для получения подробной информации вы также можете прочитать мой вопрос об этом.

Создание экземпляра неизвестной структуры без ссылки

введите здесь описание изображения

person Niklas R.    schedule 23.04.2016

Ваша IDE и инструменты для сборки — это два «совершенно» разных процесса. Вам не о чем беспокоиться, если ваш код компилируется с помощью Cmake и MingW. Вероятно, вы настроили свою IDE с параметрами, отличными от указанных в CMakeLists. Вам нужно связать библиотеку C++ hdf5 в вашем редакторе, чтобы решить «проблемы» в вашей IDE. Это только улучшит читаемость.

person Thomqa    schedule 28.01.2016
comment
IDE использует mingw и файл CMakeLists для компиляции кода и настроена на использование тех же mingw и cmake, что и в командной строке. - person TomW; 28.01.2016
comment
Сборка и проверка синтаксиса в среде IDE — это две разные вещи. Сам MinGW не дает вам хороший список мест для подчеркивания, он просто сообщает об некоторых ошибках сборки (первых, с которыми он сталкивается). С другой стороны, среде IDE необходимо удалить как можно больше ошибок, поэтому она использует собственный (созданный вручную) синтаксический анализатор и своего рода компилятор только для проверки синтаксиса. Вот почему, даже если MinGW настроен в среде IDE, он по-прежнему показывает ошибки, которые принимает MinGW. - person Martin Pecka; 22.02.2016
comment
также вам следует поискать эту ошибку в трекере clion и сделать отчет об ошибке, если вы не найдете похожих проблем. - person strangeqargo; 26.04.2016

Я также столкнулся с этой ошибкой, и оказалось, что в моем случае я действительно забыл включить заголовок. При использовании Emacs отображается правильная информация об ошибке (Implicit instantiation of undefined template 'std::basic_ifstream<char,std::char_traits<char>>') (см. Почему я получаю это ошибка ifstream?). Я не уверен, почему CLion неправильно сообщил об ошибке.

person xji    schedule 08.04.2018