0

使用带有命名空间的枚举时遇到问题。

下面是函数调用:

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

编译器的问题来自

tmpZone->getLine()

Zone 类(在洞察命名空间中)的 getLine() 原型是:

Line getLine();

它返回洞察命名空间中的枚举类型。此函数调用位于 using 命名空间洞察下的 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 类也在洞察命名空间中定义。有什么想法吗?

4

2 回答 2

1

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

尝试:

namespace insight {
  void InsightLT::writeMessage(std::string, insight::Line, int)
  {    
  }
}
于 2013-01-25T00:40:37.087 回答
0

我能够编译它,但我不知道为什么我所做的工作。为了完整和结束,我想把它放在这里。

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

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

感谢那些试图提供帮助的人,对不起,我无法整理一个显示错误的示例。

于 2013-01-25T21:05:22.687 回答