2013-03-12 58 views
1

我試圖用第三方C++源代碼(機器人SLAM的TORO框架,你可以通過svn獲得它:svn co https://www.openslam.org/data/svn/toro),試圖封裝它稍後將在我的C#代碼中使用的DLL。 但是,我只是通過將源文件包含到我的項目中來獲得各種錯誤。 例如,對於下面的代碼C++怪異的編譯錯誤,深深的錯誤

void TreePoseGraph<Ops>::revertEdge(TreePoseGraph<Ops>::Edge * e){ 
    revertEdgeInfo(e); 
    Vertex* ap=e->v2; 
    e->v2=e->v1; 
    e->v1=ap; 
} 

我收到以下錯誤:

錯誤C2182: 'revertEdge':非法使用類型 '無效'
錯誤C2470的:「AISNavigation :: TreePoseGraph :: revertEdge':看起來像一個函數d 的定義,但是沒有參數列表;跳繩明顯的身體
錯誤C2072:「AISNavigation :: TreePoseGraph :: revertEdge」:初始化函數

當然,如果它包括(revertEdge)在正確的頭我做的第一件事是檢查的,並在stdAfx.h中,當然它到處都是。此外,智能感知可以識別所有東西,可以將我指向所有東西的源頭,所以似乎沒有任何東西從項目中遺漏。但是,我收到了類似的大量錯誤。

我敢肯定,我在開始的時候在這裏做了一些非常錯誤的事情,這導致了所有這些無意義的錯誤消息的轉儲(可能有1-2個合理的,但其餘的只是avalance的結果)。你可以給出任何建議,可能會導致如此巨大的一組錯誤信息?

回答

2

只是一個猜測,但你可能需要TreePoseGraph<Ops>::Edgetypename爲了告訴編譯器Edge實際上是一個類型,即

void TreePoseGraph<Ops>::revertEdge(typename TreePoseGraph<Ops>::Edge * e) 
{ 
    // ... 
} 
+0

這實際上解決了這個問題!現在我對這個功能沒有任何問題。我會嘗試將類型名稱放在需要使用自定義類型名稱的地方。 – 2013-03-12 17:50:24

+0

不要把它們放在任何地方,因爲這個類型是一個*依賴*類型,即依賴於一些模板參數的類型(在你的例子中:'Ops')。 – 2013-03-12 17:56:50

+0

好的,非常感謝,這個問題已經解決了,我設法解決了這個文件的錯誤,但現在還有其他問題出現。恐怕我很快就會有更多的問題。問題在於,我對高級C++根本沒有經驗。 :( – 2013-03-12 18:03:42

0

我覺得這是應該的樣子:

template<class Ops> void TreePoseGraph<Ops>::revertEdge(TreePoseGraph<Ops>::Edge * e) { 
    // ... 
} 
+0

這是完全正確的,它看起來像那樣!!!(我忘記把這一行放在這裏,對不起) – 2013-03-12 17:49:04