为什么我不能将头文件导入到我的一个头文件中的库中?

时间:2017-02-15 23:50:32

标签: c++ socket.io

我在我的C ++项目中使用C++ socket.io library,我无法在项目头文件中包含所需的头文件。

但是当我在CPP文件中包含所需的头文件时,我成功地能够包含所需的头文件。

使用该库的步骤:

  1. 编译C ++ websocketpp,openssl,boost库,并准备JSON库。
  2. 链接VS2015项目中的* .lib文件。
  3. 在C ++其他include dependencies文件夹中包含头文件位置。
  4. 在Linker include dependencies文件夹中包含* .lib文件位置。
  5. 在我的CPP文件中包含三个头文件。
  6. 生成。好极了!它有效!
  7. 尝试将库功能封装到我自己的类/对象中。
  8. 尝试在头文件中包含三个库头文件。请注意有关初始化的大量编译错误。
  9. 标题文件导入

    #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 个答案:

答案 0 :(得分:1)

<强>解决方案:

我弄清楚发生了什么问题。 Socket.io C ++库和Qt共享命名空间关于单词&#34; emit&#34;。如果其他人遇到这个问题,我就是这样解决的:

  1. git clone https://github.com/raksa/SocketIO-cpp-lib
  2. 编辑术语的所有实例&#34; emit&#34;在源文件中。在我的情况下,我将它们全部更改为&#34; emit_signal&#34;。
  3. 在websocketpp库中进行git checkout开发。 (自2017年2月16日起,不会在主人或最新标签上编译)。
  4. 从SocketIO-cpp-lib项目重新编译sioclient.lib文件,以进行调试和发布。
  5. 转到您的项目并链接到lib文件。另外,提供lib文件路径。
  6. 将sioclient.h,siosocket.h和siomessage.h文件目录包含在包含路径中。
  7. 将boost库路径和boost库* .lib文件包含在项目中。
  8. 在项目中包含任何Socket.io C ++头文件时,您不应该有错误。
  9. 希望这可以帮助其他人解决同样的问题。

    注意:构建sioclient.lib文件时,我还遇到了另一个问题。您可能需要进行优化&#34;和&#34;调试&#34;其中一个项目文件夹中的文件夹。 CMAKE脚本错误地引用了项目中不存在的文件夹。那,或者从CMAKE脚本中删除这些行。