包含可可标头时出错
Errors when including Cocoa header
我一直在创建一个在MacOS和Windows上使用的UI工具包,但我目前正在工作和测试MacOS方面的东西。最近,当我使用 CMake 编译我的代码时,我因包含 Cocoa 标头而出现不合理的错误。这是错误的幽灵箱。
我不确定这是否是你问题的完整答案,但希望它能给你一条前进的道路。感谢@uliwitness提到#if __OBJC__
。
所以 QT5 有一个用于 qmacextras 的 git 存储库,它结合了 c++ 和 objective-c,我正在做的事情以及我在导入<Foundation/Foundation.h>
或<Cocoa/Cocoa.h>
时如何看到一堆错误。查看他们的一些代码,我看到了这个:
// ### remove when merged to QtCore
/*!
* macro Q_FORWARD_DECLARE_OBJC_CLASS(classname)
*
* Forward-declares an Objective-C class name in a manner such that it can be
* compiled as either Objective-C or C++.
*
* This is primarily intended for use in header files that may be included by
* both Objective-C and C++ source files.
*/
#ifdef __OBJC__
#define Q_FORWARD_DECLARE_OBJC_CLASS(classname) @class classname
#else
#define Q_FORWARD_DECLARE_OBJC_CLASS(classname) typedef struct objc_object classname
#endif
和
// Put in your header file
Q_FORWARD_DECLARE_OBJC_CLASS(NSData);
Q_FORWARD_DECLARE_OBJC_CLASS(NSImage);
// etc
https://code.qt.io/cgit/qt/qtmacextras.git/tree/examples/macextras/macfunctions?h=5.14
使用此方法可能会消除这些错误。
你真的不是在问一个问题...但是从您提供的少量信息中随意一瞥,看起来有 ObjC 代码正在通过非 ObjC 编译器运行。
当有人包含来自 C 或C++源文件的 ObjC 标头时,通常会发生这种情况。导致这种情况的一种非常常见的方法是向包含 Cocoa/Cocoa.h 的项目添加一个预编译标头。预编译标头用于您编译的所有C 后代语言,因此也用于 C 或 C++ 文件。
若要避免特定于 ObjC的代码包含在非 ObjC 文件中,请将其包装在#if __OBJC__
预处理器宏中。(这也适用于预编译标头中的C++代码,您需要将其包装在#if __cplusplus
中(
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 为x86而非x64编译时出错
- 从R调用C++函数并对其进行集成时出错
- 这个函数哪里出错了
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 为重写std::exception的库生成swig接口时出错
- 导入/导出变量时出错
- 包含可可标头时出错