2014-04-01 105 views
0

我为C++编写了一个Objective-C包装器,所以在主文件中,我只需要使用C++代码。在一个测试项目中,它的功能完美无缺,所以我想在一个相当大的游戏中实现。问题是,当我只在我的基本节点类使用包括标题导致解析问题

#include "ViewWrapper.hpp" 

CCNode.h从的Cocos2D-X),我得到了很多解析,语义和Leixcal或Prepocessor问题的另一个文件(从“助推” named_params.hpp)没有真正使用它,只写包含。如果我删除它,一切正常。有谁知道这可能是什么原因?

(在我的测试项目,我在CCNode包括它也没有问题。)

编辑:的ViewWrapper.hpp代码:

#ifndef __Cocos__ViewWrapper__ 
#define __Cocos__ViewWrapper__ 

#include <CoreGraphics/CGGeometry.h> 
#include <CoreGraphics/CGColor.h> 

class ViewWrapper 
{ 
public: 
    const char* accessibilityLabel(); 
    void setAccessibilityLabel(const char* accessibilityLabel); 

    CGRect accessibilityFrame(); 
    void setAccessibilityFrame(CGRect accessibilityFrame); 

    CGRect frame(); 
    void setFrame(CGRect frame); 

    CGColorRef backgroundColor(); 
    void setBackgroundColor(CGFloat r, CGFloat g, CGFloat b, CGFloat a); 

    ViewWrapper (CGRect frame); 
    ViewWrapper (void); 
    ~ViewWrapper (void); 
private: 
    struct Impl; 
    Impl* impl; 
}; 
#endif /* defined(__Cocos__ViewWrapper__) */ 

希望有所帮助。

错误在struct nil {...}。也许它有一些问题,因为Objective-C使用零和我的包装包装Objective-C代码?但我的头是一个.hpp文件...

ANSWER(不能正确回答,因为它是保留): 我取下的两个包括

#include <CoreGraphics/CGGeometry.h> 
#include <CoreGraphics/CGColor.h> 

和使用科科斯头像CCGeometry.hccTypes.h所以头没有Objective-C代码,编译器不会与增强版的nil混淆。

+2

然后你的头文件中有一些错误。你是否错过了一个预处理程序'#endif'?缺少分号?缺少或额外的大括号('{'或'}')? –

+0

没有更多的细节很难说...检查预处理器宏重新定义的东西,检查未关闭的#endif,未关闭},检查标题中使用名称空间。 – jsantander

+0

头文件本身必须有一些错误..寻找一些愚蠢的错误... –

回答

1

我的钱是在一类,枚举,枚举类或结构声明后失踪;

struct AprilFool 
{ 

} 

// IMPAHTANT: 
; 
// END IMPAHTANT 
+0

强烈的可能性.. –

+0

这是一个非常常见的错误,也是视觉工作室对这些错​​误感到疯狂 – Raxvan

+0

谢谢,但正如你可以在我的代码中看到的那样,我复制粘贴了我的函数'ViewWrapper.hpp'。 – Southgarden116

0

没有文件有哪些文件扩展名,这是从包括在内?所有的错误都显示出来了?

就编译器而言,标题不存在。他们只编译源文件。任何被编译的头文件都会被有效地“复制到源文件中”,就在include语句所在的位置。

因此,如果您从.m文件包含此文件,它会被编译为.m(Objective-C)。无论标题是否有后缀“.hpp”。 (如果你想知道更多关于这个的信息,可以在一本关于C的好书中查找“编译单元”,或者听取NSBrief第113集,我被要求解释所有东西Objective-C++:http://nsbrief.com/113-uli-kusterer/)。

它也有助于知道你有什么。第一个包含这个标题吗?持续?下一个包括错误的那个人是否正确?包含此文件的文件中是否有任何代码?如果你把它作为最后的包含,它是否工作,还是只是在包含后的下一行错误?在一个头部结束时发生的错误可能会“溢出”到下一行,被一个由include语句或同一头部复制的副本粘贴。

+0

我的'ViewWrapper。 'CCNode.h'包含'CCNode.h',并且它是最后一个包含,所以它正好来自'CCNode.h'的所有标准。 就像我说的,t他的封装工作正常,在我的测试项目中,同一个文件包含在同一个头文件中。如果你想知道,'ViewWrapper.hpp'也包含在'ViewWrapper.mm'中。 – Southgarden116

+0

那么,*应该*按照你描述它的方式工作,所以你可能已经遗漏了一些东西,或者重新输入了代码,并且意外地固定了这个问题。错误来自.cpp文件吗?或从.mm文件?或者你是否为他们得到他们?你有什么确切的错误? – uliwitness