2014-04-01 148 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