如何让XCode构建一个包含Objective-C ++的项目?

时间:2014-04-12 08:48:10

标签: objective-c xcode objective-c++ scintilla

我成功地将Scintilla框架添加到我的XCode项目中(即它正确地找到了头文件),但是因为它是用Objective-C ++编写的,所以它不会编译。由于:: s,我得到8个语法错误。我已经发现您无法从纯Objective-C文件中包含Objective-C ++,因此我将文件扩展名更改为mm。它仍然给我相同的8个错误 我还将(导入文件的)文件类型更改为sourcecode.cpp.objcpp

相关的代码行(注释中的错误 - 行号来自原始文件,因此没有注释中的错误):

ScintillaView.h

// Line 47-49
@protocol ScintillaNotificationProtocol 
- (void)notification: (Scintilla::SCNotification*)notification; // 4 errors on this line:
                                                                //   1. expected type-specifier
                                                                //   2. expected ')'
                                                                //   3. expected identifier
                                                                //   4. expected ';'
@end
// [snip]
// Line 131
- (void) notification: (Scintilla::SCNotification*) notification;   // The exact same errors.

复制此代码时,我注意到::运算符在文件中使用了几次,所以解析器只能在某些地方成功匹配它。

此代码不再是我的,而是来自Scintilla Cocoa Library。
(有关详细信息,请参阅此处:http://www.scintilla.org/

XCode 3.2.6,Mac OS X 10.6.8

1 个答案:

答案 0 :(得分:0)

添加

typedef tdSCNotification Scintilla::SCNotification

在第一个违规行显示该命名空间中没有名为SCNotification的类型之前。所以我搜索了namespace Scintilla {包含的头文件(幸运的是,只计算了三个)。它位于第一个包含的头文件Scintilla.h中。但它看起来像这样:

#ifdef SCI_NAMESPACE
namespace Scintilla {
#endif

#ifdef SCI_NAMESPACE
}
#endif

所以我认为SCI_NAMESPACE没有定义。我在网上某处向#define SCI_NAMESPACE添加了Scintilla.h 45并且有效。几乎。我收到了另一条错误消息:

  

未找到框架Scintilla
  命令/Developer/usr/bin/llvm-g++-4.2因退出代码1而失败

我认为这与我在项目中添加框架的方式有关,因此它应该是一个单独的问题。