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

桑德斯

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

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

利用该库采取的步骤:

  1. 编译C ++ websocketpp,openssl,boost库并准备JSON库。
  2. 链接到我的VS2015项目中的* .lib文件。
  3. 在C ++其他包含依赖项文件夹中包含头文件位置。
  4. 在链接器包含依赖项文件夹中包含* .lib文件位置。
  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. 循环依赖?可能是由于在我的类中包含头文件引起循环依赖,而其他头文件之一包含了该文件。
桑德斯

解决方案:

我弄清楚问题出在什么地方。Socket.io C ++库和Qt都在名称“ emit”方面共享名称空间。如果有人遇到此问题,请按以下步骤解决:

  1. git clone https://github.com/raksa/SocketIO-cpp-lib
  2. 在源文件中编辑术语“发射”的所有实例。就我而言,我将它们全部更改为“ emit_signal”。
  3. 在websocketpp库中进行git checkout开发。(截至2017年2月16日,将无法在master或最新标签上进行编译)。
  4. 从SocketIO-cpp-lib项目重新编译sioclient.lib文件以进行调试和发布。
  5. 转到您的项目,并链接到lib文件。另外,提供lib文件路径。
  6. 将sioclient.h,siosocket.h和siomessage.h文件的目录包括到您的包含路径中。
  7. 在项目中包含boost库路径和boost库* .lib文件。
  8. 在项目中包含任何Socket.io C ++头文件时,都不会出现错误。

希望这对其他遇到相同问题的人有所帮助。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么为ios构建的静态库仅包含一个头文件

在另一个头文件中包括头文件中的typedef枚举

当我根本不能将其放在头文件中时,为什么要声明一个“私有”函数为静态?

如何在另一个头文件中包含c头文件?

Makefile | 对头文件中包含的另一个头文件的依赖

您可以在一个库中实现多个头文件吗?

来自第二个头文件中的一个头文件的Typedef用法

为什么在另一个头文件中声明结构会导致LNK2001错误?

C++ - 在另一个头文件中包含一个头文件以使全局变量可用于数组声明

在C ++中使用另一个头文件中的抽象类

C++ 在两个头文件中包含一个类

什么是“ pch.h”,为什么需要将其包含为第一个头文件?

C头文件包含在另一个头文件中,并且都包含在ac文件中

在 C 或 C++ 中,如何防止头文件中先前的 #define 影响以后包含的另一个头文件?

为什么多个头文件和源文件中的 C++ 继承不起作用?

如何在 C 中包含另一个头文件中定义的结构数组?

如何让一个头文件中的声明访问三个单独的视图控制器?

在C中链接多个头文件

在 VS 2017 中为“便携式”项目包含一个头文件(C++)

C编程如何在另一个头文件中打印出结构的元素?

查找具有特定文件名格式的文件,为每个文件添加一个头文件,并将每个文件的结果保存到原始文件中

为什么我们需要构建一个boost库,仅仅包含头文件是不够的,因为boost是模板

为什么我不能从Reactjs中的另一个文件导入常量?

为什么我不能在头文件中定义全局函数?

为什么我不能在头文件中单独写入名称空间的层次结构?

如何在 C 编程中将两个头文件和 3 个 c 文件链接到一个可执行文件中?

使用两个 .cpp 文件和一个头文件

我应该在每个头文件中放置一个 C++ 宏保护吗?

为什么我不能包含来自cmake导出/导入库的头文件