我一直在创建一个在 MacOS 和 Windows 上使用的 UI 工具包,但我目前正在研究和测试 MacOS 方面的事情。最近,当我使用 CMake 编译我的代码时,我从包含 Cocoa header 中得到了不合理数量的错误。 Here是错误的 ghostbin。
最佳答案
我不确定这是否是您问题的完整答案,但希望它能为您指明前进的道路。感谢@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
使用它可能会消除这些错误。
关于c++ - 包含 Cocoa header 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50868447/