2013-03-12 38 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