1

我正在尝试使用第 3 方 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 个是合理的,但其余的只是雪崩的结果)。您能否提出任何建议,可能导致收到如此大量的错误消息?

4

2 回答 2

2

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

void TreePoseGraph<Ops>::revertEdge(typename TreePoseGraph<Ops>::Edge * e)
{
    // ...
}
于 2013-03-12T17:46:36.170 回答
0

我认为它应该是这样的:

template<class Ops> void TreePoseGraph<Ops>::revertEdge(TreePoseGraph<Ops>::Edge * e) {
  // ...
}
于 2013-03-12T17:48:03.243 回答