c++ - 获取错误 150 : C++ feature not enabled during compilation

标签 c++ c

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

文件 a.h:

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

EXTERNC void func();
#undef EXTERNC

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

我有一个 b.c 文件,我想从中调用函数 func()。我在 b.c 中包含了 a.h 文件,并正常调用了函数 func()。但是在编译过程中出现以下错误:

编译 b.c a.h(192):错误 150:0:未启用 C++ 功能。

谁能帮我解决这个错误。

最佳答案

它看起来像是对 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 处停止。 尝试编译一个仅包含

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

这应该在“OK”行标记错误。如果它做了任何其他事情,编译器就会(非常)有缺陷。

关于c++ - 获取错误 150 : C++ feature not enabled during compilation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18886726/

相关文章:

c - 将 sprintf 与 char * 一起使用

c - 在同一个程序中混合 C 和 D 代码?

比较两个时间值

C++ 什么是 NULL 指针值?

c++ - 算法复杂度 - O(log n) 的解释?

C++ 运算符 < 重载

c - 在c中将内存地址作为文件传递

从 Fortran 调用 GSL 例程 CQUAD

c++ - 如何通过参数包参数设置 std::array 大小?

c++ - 编译器优化