【发布时间】:2014-07-08 01:07:41
【问题描述】:
这是我的第一篇文章,如果我没有遵守任何发帖惯例,请原谅我。 我一直在开发一个在 OSX 10.7.5 上使用 xcode 4.6.2 中的“Cocoa/Objective C”前端的应用程序,并通过 Objective c++ 适配器类访问 c++ 库。 这是一个陡峭的学习曲线,但事情进展顺利。我现在遇到了一个绊脚石,我希望这里有人知道如何解决。
我最近在我的 c++ 后端中包含了一个新库,它在我的“仅限 C++”后端实验 xcode 项目中完美运行。但是当我尝试编译我的ObjC/Objc++/C++ 版本时,我在Objective C++ 文件中遇到级联语法错误,大致如下:
In Objc++.mm:
#include "objCclass.h" //no problem here
#include "CppBackend.h" //c++ libs included by this file cause the following errors:
@interface objCclass () //!unexpected '@' in program
-(id)classmethods //(class extension to allow access to c++ backend)
@end //!end must appear in an objective c context
//etc,etc....
@synthesize x,y,z; //!Missing context for property implementation declaration
//errors on most lines that work fine when CppBackend.h is not included
Other 因此,类似主题的帖子表明经常出现导致此问题的愚蠢语法错误,但我认为这里并非如此。我的 Cocoa 前端在没有后端包含的情况下工作,而后端在纯 c++ 项目中完美地工作。
如果有任何帮助,我将不胜感激。非常感谢这里的人们为这个问题和其他问题提供的所有帮助。
马克
更新 - 我发现如果我注释掉类扩展(并删除任何子序列依赖问题) - 它可以工作!会不会是 ObjC++ 编译器出现了不喜欢看到类扩展的问题?
【问题讨论】:
-
试着写一个包含
#include "CppBackend.h"的文件,然后看看它是否同时编译为C++和Objective-C++。 -
您确定文件类型设置为Objective C++ 对吧? i.stack.imgur.com/ogeaF.png 用于 Xcode 4。
-
感谢您的快速回复。 Dietrich - 我制作了一个新的、空的 Cocoa 应用程序,更改为 AppDelegate.mm,包含 backend.h,它似乎可以编译,这真是个好消息,我猜这意味着问题出在我的项目中而不是固有的问题库不兼容。我很高兴发现了这一点。不知道下一步该怎么做.....
-
您的包含文件没有干净地结束。最后有一个悬而未决的声明。
-
我已经多次看到此类问题。通常在包含结尾附近缺少
}或;。可能会被 #if 语句混淆,这些语句会根据情况为您提供不同的流程。如果错误在包含内的包含内,则可能会令人困惑。有些东西会编译正确,有些则不会。甚至会导致后面的语句被“吞下”的“沉默”问题。
标签: c++ objective-c xcode cocoa objective-c++