C ++奇怪的编译错误,有些深刻的错误

时间:2013-03-12 17:43:08

标签: c++ compiler-errors

我正在尝试使用第三方C ++源代码(机器人SLAM的TORO框架,您可以通过svn使用:svn co https://www.openslam.org/data/svn/toro获取它),尝试将其封装在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':非法使用'void'类型   错误C2470:'AISNavigation :: TreePoseGraph :: revertEdge':看起来像一个函数d   定义,但没有参数列表;跳过明显的身体
  错误C2072:'AISNavigation :: TreePoseGraph :: revertEdge':函数初始化

当然,我做的第一件事就是检查它是否包含在正确的标题中(revertEdge),在stdAfx.h中,当然它随处可见。 此外,IntelliSense可以识别所有内容,可以指出我所有内容的来源,因此似乎项目中没有任何内容。然而,我收到了类似的大量错误。

我确信我在开头就做了一些非常错误的事情,导致所有这些无意义错误消息的转储(好吧可能有1-2个合理,但剩下的只是平衡的结果) 。您能否提出任何可能导致获得如此大量错误消息的建议?

2 个答案:

答案 0 :(得分:2)

只是一个猜测,但你可能需要在typename之前TreePoseGraph<Ops>::Edge才能告诉编译器Edge实际上是一个类型,即

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

答案 1 :(得分:0)

我认为这应该是它的样子:

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