2013-01-25 64 views
0

使用枚举与命名空间有问题。带枚举的命名空间问题

下面是函数调用:

object->writeMessage(tmpZone->getLineOne(), tmpZone->getLine(), tmpZone->getPosition()); 

从编译器的问题来自

tmpZone->getLine() 

的原型函数getline()从区级(这是在洞察命名空间)是:

Line getLine(); 

它在insight命名空间中返回一个枚举类型。此函数调用位于使用名称空间洞察下的cpp文件中;线。

编译错误是

C:/WindRiver/workspace/SimpleTemplate/InsightLT.cpp:在静态成员 函数static int insight::InsightLT::taskFunction(insight::InsightLT*)': C:/WindRiver/workspace/SimpleTemplate/InsightLT.cpp:161: error: no matching function for call to 洞察:: InsightLT ::的WriteMessage(的std :: string,线,INT) “ C:/WindRiver/workspace/SimpleTemplate/InsightLT.cpp:82:注意: 候选人是:无效的洞察力:: InsightLT ::的WriteMessage(的std :: string, 洞察::线,INT)

我想不出为什么会发生这种情况。 Zone类也是在insight命名空间中定义的。任何想法家伙?

+0

getLine()函数的原型是什么? –

+6

请提供一个说明错误的完整小例子。 – Oswald

+0

'getPosition()'返回一个'int',或可转换为'int'的东西吗? getLineOne()'返回一个'string',或者可以转换为'string'的东西?你为什么说这个问题来自'getLine()'?我不能从编译器错误 –

回答

1

编译器无法从insight namespace解析Line,您可以在函数定义中提供完整的命名空间,也可以在namespace insight中包装cpp。

尝试:

namespace insight { 
    void InsightLT::writeMessage(std::string, insight::Line, int) 
    {  
    } 
} 
+0

我已经将函数定义封装在insight命名空间中,正如您所描述的 – gettingSmarter

+0

尝试为Line提供完整的namesapce以及 – billz

+0

没有运气。我在原型中指定了完整的命名空间以及writeMessage的定义。 – gettingSmarter

0

我能得到这个编译,虽然我不知道为什么我没有工作做。为了完整性和封闭性,我想把它放在这里。

我声明了Line enum和名字空间范围内的另一个枚举以及另一个类。我删除了枚举并将它们放入与之前相同的名称空间内的自己的头文件中,现在编译它。

我不知道我错过了什么,这解决了这个问题。如果有人有任何考虑,请评论这可能已经修复。

感谢那些试图帮助和抱歉的人,我无法组装一个显示错误的例子。