c++ - 在 C 中使用 C++ 类
问题描述
我是 C++ 新手。我正在做的是在 C 中创建一个回调库文件。该文件将在 C++ 应用程序中使用。C 文件将只有三个函数,仅供参考,由于类开销,我不想为此创建另一个 cpp 文件/类,并且类应该只在 cpp 文件中。请通过代码片段。C 文件 XYZ.c 在其函数中使用 ABC.hpp 类。
全部头文件.hpp
#include<iostream>
.
.
ABC.hpp
#include "Allheader.hpp"
.
.
XYZ.h
func1();
func2();
func3();
XYZ.c
include "XYZ.h"
include "ABC.hpp"
func1()
{
using class of ABC here
}
func2() {}
func3() {}
我的应用程序.cpp
extern "C" { #include "XYZ.h"}
.
.
所以这个文件 XYZ.c / XYZ.h 将在我的 CPP 应用程序中用作回调。
用 g++ 编译
我做了什么。
- 已编译:显示错误,没有文件 iostream。
当我编译 C 文件并在其中使用 C++ 时,开始使用 __BEGIN_DECLS
并且 XYZ.c 文件中的代码位于
__BEGIN_DECLS __END_DECLS
同事建议的块。但仍然错误是一样的。
如何在 C 函数中使用 C++?请提出任何解决方案。
解决方案
您不能将 C++ 代码编译为 C 代码。此 C 代码无效:
#include "XYZ.h"
#include "ABC.hpp" // this is wrong
func1()
{
using class of ABC here // this is also wrong (and incomplete...)
}
func2() {}
func3() {}
再次 - 你根本无法做到这一点。C 和 C++ 是不同的语言。你不妨试试问“为什么我不能用 C 编译器编译 Java 或 Python”,答案是一样的,“因为它不是 C”。
extern "C"
您可以通过 C 的链接调用 C++ 函数。
从 C++ 文件:
extern "C" void calledFromC()
{
// C++ code
}
然后,在一个可以被#include
C 'd 的 C++ 头文件中:
#ifdef __cplusplus
extern "C" {
#endif
void calledFromC();
#ifdef __cplusplus
}
#endif
推荐阅读
- r - 如何根据不同列中的值对列进行子集化?
- linux - /bin/sh 使用假 ls 的权限提升代码 - 为什么会这样?
- javascript - 将 Python 代码实现为 Javascript 时我做错了什么?
- python - 如果单元格满足特定条件,则从行中提取特定值
- python - 数据清理:从结果中消除 csv 文件中包含的值
- lua - 调用 table.sort 返回 nil
- eclipse - 当我尝试打开运行或调试配置时,Eclipse 2019-06 冻结
- html - CSS - 带有溢出省略号的旋转文本
- java - 如何解决:系统服务在 onCreate() 之前对活动不可用?
- css - React-Toolbox:尝试将卡片水平对齐