c++奇怪的编译错误,严重错误

C++ weird compilation errors, something deeply wrong

本文关键字:错误 严重错误 编译 c++      更新时间:2023-10-16

我正在尝试使用第三方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':看起来像一个函数定义,但没有参数列表;跳过显体
错误C2072: 'AISNavigation::TreePoseGraph::revertEdge':初始化函数

当然,我做的第一件事是检查它是否包括(revertEdge)在正确的头,并在stdAfx.h,当然它是无处不在。此外,智能感知识别一切,可以为我指出一切的来源,所以这个项目似乎没有什么缺失。然而,我得到了大量类似的错误。

我确定我在开始的时候做了一些非常错误的事情,这导致了所有这些无意义的错误消息(好吧,可能有1-2个合理的错误消息,但其余的只是雪崩的结果)。你能不能给点建议,是什么导致了这么多错误信息?

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

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

我认为它应该是这样的:

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