收到错误 150:编译期间未启用C++功能
Getting Error 150: C++ feature not enabled during compilation
我正在尝试从 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.cA.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
.尝试编译仅包含 C 文件
#ifdef __cplusplus
#error problem
#else
#error OK
#endif
这应该在"确定"行上标记错误。如果它执行任何其他操作,则编译器(非常)有缺陷。
相关文章:
- 编译时未启用intel oneApi CUDA支持
- OpenGL在启用深度测试时不会丢弃我的碎片
- Visual C++GC接口如何启用它以及要包含哪个库
- 如何在自定义类中启用'auto loops'?
- 根据某个函数是否存在启用模板
- 视觉工作室 2017;启用 /permissive 时,类型 "const wchar_t *" 的参数与类型 "PWSTR" 的参数不兼容
- 启用从"vector<const T>&"到"const vector&"的隐式转换<T>
- C++ win32 如何使密码字段可选并启用复制和粘贴?
- 在 Eclipse 上启用 C++17 以使用 'std::byte'
- 当 noexcept 函数尝试在 gcc 或 clang 中调用非 noexcept 函数时启用警告
- 如何为一段代码启用 -permissive
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 在 GCC 中启用"differing levels of indirection"警告/错误
- 使用 Doxygen 记录枚举类值,而不启用EXTRACT_ALL
- '_HAS_CXX17'宏是否可用于自定义项目标头以启用C++17 语言集功能?
- 如何启用转换模板参数 T 以常量 T?
- 在使用 gSoap 链接多个 SOAP 服务时启用保持活动状态
- 如何启用标准::实验::atomic_shared_pointer
- 如何启用友元类的友元功能直接在C++中访问其私有成员
- 如何在Visual Studio 2019中启用C++98编译?