CHloe____ 2023-04-19 20:17 采纳率: 0%
浏览 21

一个C++写的头文件包含了string库,在一个C写的头文件中include了这个头文件,编译时报错

项目的代码是C和C++语言混合编写的,主要是C部分调用C++编写的模块。在一个C++写的头文件xml_definition.h中有#include,在一个C写的头文件中include了这个C++头文件。
在编译时报错 string: No such file or directory

img


请问应该如何解决这种依赖问题?

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-21 20:39
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt:

      这种情况下,需要在C头文件中使用extern "C"来声明包含的C++头文件,并使用g++编译器来编译整个项目。

      下面是具体的解决方案:

      1. 在C++头文件xml_definition.h中,可以在代码的开头添加以下代码,以指定这个头文件的编译方式:
      #ifdef __cplusplus
      extern "C" {
      #endif
      
      // your code here
      
      #ifdef __cplusplus
      }
      #endif
      

      这段代码实际上是将C++的代码包裹在一个extern "C"块中,这样C编译器就可以正确处理C++的代码。

      1. 在C头文件中,需要使用#include和extern "C"来包含C++头文件,并声明extern "C"块中包含的所有函数、变量等符号使用C语言的命名规则。
      extern "C" {
      #include "xml_definition.h"
      }
      
      // your code here
      

      这样可以让C编译器正确处理C++头文件中的代码,并且可以正确编译整个项目。

      1. 然后,需要使用g++编译器来编译整个项目。可以使用以下命令:
      g++ -o my_program my_program.c my_c_code.c my_cpp_code.cpp -lstdc++
      

      其中:

      • -o 指定输出文件名
      • my_program.c 指定C代码文件
      • my_c_code.c 指定C代码文件
      • my_cpp_code.cpp 指定C++代码文件
      • -lstdc++ 指定链接C++标准库

      这样就可以正确编译整个项目,在链接时也不会有任何问题。

      完整的代码示例请见下方:

      // xml_definition.h
      
      #ifdef __cplusplus
      extern "C" {
      #endif
      
      #include <string>
      
      // your code here
      
      #ifdef __cplusplus
      }
      #endif
      
      // my_c_code.h
      
      extern "C" {
      #include "xml_definition.h"
      }
      
      // your code here
      
      // my_cpp_code.cpp
      
      #include "xml_definition.h"
      
      // your C++ code here
      

      编译命令:

      g++ -o my_program my_program.c my_c_code.c my_cpp_code.cpp -lstdc++
      

      这样就可以解决这种依赖问题了。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 4月19日

悬赏问题

  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数
  • ¥15 ADS时域 连续相位观察方法
  • ¥15 Opencv配置出错