枚举的命名空间问题

时间:2013-01-25 00:27:00

标签: c++

使用名称空间的枚举时遇到问题。

以下是函数调用:

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

来自编译器的问题来自

tmpZone->getLine()

来自Zone类(在insight命名空间中)的getLine()原型是:

Line getLine();

返回insight命名空间中的枚举类型。此函数调用位于using namespace 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 insight :: InsightLT :: writeMessage(std :: string,Line,int)'   C:/WindRiver/workspace/SimpleTemplate/InsightLT.cpp:82:注意:   候选人是:void insight :: InsightLT :: writeMessage(std :: string,   insight :: Line,int)

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

2 个答案:

答案 0 :(得分:1)

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

尝试:

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

答案 1 :(得分:0)

我能够将其编译,但我不知道为什么我的工作。为了完整和封闭,我想把它放在这里。

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

我不确定我错过了什么,这解决了这个问题。如果有人有任何考虑因素,请评论这可能有什么问题。

感谢那些试图提供帮助的人,抱歉我无法将一个示例放在一起显示错误。