首页 > 解决方案 > 在 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++ 编译

我做了什么。

  1. 已编译:显示错误,没有文件 iostream。
  2. 当我编译 C 文件并在其中使用 C++ 时,开始使用 __BEGIN_DECLS

    并且 XYZ.c 文件中的代码位于

    __BEGIN_DECLS __END_DECLS

    同事建议的块。但仍然错误是一样的。

如何在 C 函数中使用 C++?请提出任何解决方案。

标签: c++cg++

解决方案


您不能将 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
}

然后,在一个可以被#includeC 'd 的 C++ 头文件中:

#ifdef __cplusplus
extern "C" {
#endif

void calledFromC();

#ifdef __cplusplus
}
#endif

推荐阅读