因為一試用下去的結果,Mingw(GCC)無法順利編譯。
打開原始碼一看,正是最近才在學習中的template出了問題! Orz
然後就開始了長長的改造作業。
其實最初的錯誤訊息很簡單,就是宣告錯誤,名稱(BaseClassType)有重複而已。
不過英文訊息是使用shadow來描述,一整個就是看不懂。
最後靠著Google的搜尋,終於找到中文的討論,進一步將問題解決。
不過因為不清楚原作者命名的涵意,看來要上討論問一下kungfoomasta。
然後另一個template的問題就是在使用iterator時
如果變數宣告使用的是帶有template屬性的部分
前者最好加上typename,如:
typename std::map
否則會編譯失敗。
接下來遇到的就是&符號的問題。
在gcc裡面,所有在函式的引數中,使用&的話
前頭最好要加上const,如const string&
以上述的宣告為例,如果是直接輸入字串的話,上面的宣告可以成立
但沒有加上const的話,會認為是兩個不同的變數宣告而編譯失敗
像是void addText(const string& t)在使用時,可以直接addText("abcdef")
可是void addText(string& t)直接用上述的寫法,會錯誤。
需要寫成
string tempt = "abcdef";
addText(tempt);
這是很麻煩的一件事,不過剛好作者忘了加上吧
因為其它的部分都有加,就漏了QuickGUIText裡面的某個函數。
最後一個重點就是使用Ogre自訂巨集OGRE_NEW_T的部分
有使用的話,最好加上標頭檔"OgrePrerequisites.h"
不然在Mingw裡會編譯失敗,這邊也是作者忘了加的樣子。
因為其它地方有加到。
這樣大略改一改,整個QuickGUI又弄到可以在Mingw上面跑了。
又多學了一些東西,但也深深地清楚,很多地方還是知其然,不知其所以然啊。
整個改了一改之後,修正檔的位址在此:QuickGUI Mingw修正檔
裡面的BaseClassType有重覆的,我先改成BaseClassType1。
真正正確的,我想要等kungfoomasta發表吧。
沒有留言:
張貼留言