c++ - 在 C 中使用 C++ 类

标签 c++ c g++

我是 C++ 新手。我正在做的是用 C 创建一个回调库文件。该文件将在 C++ 应用程序中使用。 C 文件将只有三个函数,仅供引用,由于类开销,我不想为此创建另一个 cpp 文件/类,并且类也应该仅在 cpp 文件中。请查看代码片段。 C 文件 XYZ.c 在其函数中使用 ABC.hpp 类。

Allheader.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() {}

MyApplication.cpp

extern "C" { #include "XYZ.h"} 
   .
   .

因此此文件 XYZ.c/XYZ.h 将在我的 CPP 应用程序中用作回调。

使用 g++ 编译

我做了什么。

  1. 已编译:显示错误,没有文件 iostream。
  2. 当我编译 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。”

您可以通过 C 中的 extern "C" 链接调用 C++ 函数。

来自 C++ 文件:

extern "C" void calledFromC()
{
     // C++ code
}

然后,在可由 C 进行 #include 的 C++ header 中:

#ifdef __cplusplus
extern "C" {
#endif

void calledFromC();

#ifdef __cplusplus
}
#endif

关于c++ - 在 C 中使用 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53556415/

相关文章:

c - 我不知道 (int *) 的用法

c++ - 32 位 GCC 中的结构打包不起作用?

linux - 编译/链接 CUDA 和 CPP 源文件

c++ - char const * const * - <错误读取字符串的字符>

c++ - 无限脉冲响应 (IIR) 函数

C++:两个类如何在不重新声明且没有 header 相互调用的情况下相互调用

c - 如何修复 PrintUIEntry 返回错误代码 2

c++ - 分配 vector 中元素的索引而不是其值

c - 循环 C 编译并通过 BASH 运行

c++ - 如何让 g++ 需要一个标准的 `main` ?