2017-02-15 2 views
1

Я использую C++ socket.io library в моем проекте на C++, и я не могу включить требуемые файлы заголовков в заголовочный файл моих проектов.Почему я не могу импортировать файлы заголовков в библиотеку в один из моих файлов заголовков?

Но когда я включаю требуемые файлы заголовков в свой файл CPP, я успешно могу включить необходимые файлы заголовков.

Меры, принятые для использования библиотеки:

  1. скомпилировать C++ websocketpp, OpenSSL, библиотека подталкивание и подготовить библиотеку JSON.
  2. Ссылка на * .lib-файлы в моем проекте VS2015.
  3. Включите расположение файлов заголовков в дополнительной папке зависимостей C++.
  4. Включите расположение файлов * .lib в папке зависимостей Linker include.
  5. Включите три файла заголовка в файл CPP.
  6. Строительство. Ура! Оно работает!
  7. Попытка инкапсулировать функциональность библиотек в мой собственный класс/объект.
  8. Попытка включить файлы заголовков трех библиотек в мой заголовочный файл. Обратите внимание на множество ошибок компиляции об инициализации.

Импорт заголовка файла

#include <sio_message.h> 
#include <sio_socket.h> 
#include <sio_client.h> 

Ошибка при включении заголовочных файлов внутри заголовка файла:

Severity Code Description Project File Line Suppression State 
Error C2440 'initializing': cannot convert from 'nullptr' to 'const int &' c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2838 'function<void __cdecl(sio::message::list const &)>': illegal qualified name in member declaration c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2838 'function<void __cdecl(sio::message::list const &)>': illegal qualified name in member declaration c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2440 'initializing': cannot convert from 'nullptr' to 'const int &' c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2838 'list': illegal qualified name in member declaration c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2838 'list': illegal qualified name in member declaration c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2439 'sio::socket::ack': member could not be initialized  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2439 'sio::socket::ack': member could not be initialized  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2439 'sio::socket::msglist': member could not be initialized  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2439 'sio::socket::msglist': member could not be initialized  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2530 'sio::socket::name': references must be initialized  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 96 
Error C2530 'sio::socket::name': references must be initialized  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 96 
Error C2838 'string': illegal qualified name in member declaration  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2838 'string': illegal qualified name in member declaration  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2059 syntax error: ')'  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2059 syntax error: ')'  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2143 syntax error: missing ')' before 'const'  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2143 syntax error: missing ')' before 'const'  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2143 syntax error: missing ';' before 'const'  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 
Error C2143 syntax error: missing ';' before 'const'  c:\root\src\socket.io-client-cpp\build\include\sio_socket.h 75 

Возможные проблемы:

  1. Общее пространство имен? Возможно, я распространяю неправильное пространство имен?
  2. Циркулярные зависимости? Возможно, я вызываю циклическую зависимость, включая заголовочные файлы в моем классе, и один из других файлов заголовков включает этот же файл.

ответ

1

Решение:

я понял, что проблема оказалась. И библиотека Socket.io C++, и пространство имен Qt совместно используют слово «emit». В том случае, если кто-то бежит в эту проблему, вот как я решил это:

  1. мерзавец клон https://github.com/raksa/SocketIO-cpp-lib
  2. Редактировать все экземпляры термина «испускают» в исходных файлах. В моем случае я изменил их все на "emit_signal".
  3. Разработка git checkout в библиотеке websocketpp. (Не компилировался на мастер или из последнего тега по состоянию на 2/16/2017).
  4. Перекомпилируйте файл sioclient.lib из проекта SocketIO-cpp-lib для отладки и выпуска.
  5. Перейдите к проекту и свяжите его с файлом lib. Кроме того, укажите путь к файлу lib.
  6. Включите каталог sioclient.h, siosocket.h и siomessage.h в свой путь include.
  7. Включите как путь библиотек boost, так и увеличивайте библиотеки * .lib в своем проекте.
  8. У вас не должно быть ошибок при включении любого из файлов заголовков Socket.io C++ в ваш проект.

Надеюсь, это поможет кому-то еще с той же проблемой.

Примечание: я также столкнулся с другой проблемой при создании файла sioclient.lib. Возможно, вам понадобится создать «оптимизированную» и «отладочную» папку в одной из папок проекта. Сценарий CMAKE неправильно ссылается на папки, которые не существуют в проекте. Это или удалить эти строки из сценария CMAKE.

Смежные вопросы