1

我正在尝试从 C 文件中调用 C++ 函数,我已在 .h 文件中将函数声明为:

档案啊:

#ifdef __cplusplus
#define EXTERNC extern "C"
#else
#define EXTERNC
#endif

EXTERNC void func();
#undef EXTERNC

函数 func() 的定义存在于 a.cpp 文件中。

我有一个 bc 文件,我想从中调用函数 func()。我已经在 bc 中包含了 ah 文件并正常调用了函数 func()。但是在编译过程中我收到以下错误:

编译 bc ah(192):错误 150:0:未启用 C++ 功能。

有人可以帮我解决这个错误。

4

1 回答 1

1

它看起来像是对 C 文件中的 C++ 代码的抱怨。您确实有一个 C 文件,因此请确保条件编译以正确的方式进行。

#ifdef __cplusplus

#ifdef COMING_FROM_B_C
#error __cplusplus is defined in inclusion from b.c
#endif

#define EXTERNC extern "C"
#else
#define EXTERNC
#endif

EXTERNC void func();
#undef EXTERNC

并且在b.c

#define COMING_FROM_B_C 1
#include "a.h"

C 编译器禁止预定义__cplusplus,但可能出现了问题。


从你到目前为止所说的,听起来编译器停止在#ifdef __cplusplus. 尝试编译仅包含的 C 文件

#ifdef __cplusplus
#error problem
#else
#error OK
#endif

这应该在“OK”行标记一个错误。如果它执行其他任何操作,则编译器(非常)有缺陷。

于 2013-09-19T05:39:11.577 回答