将'const Link'作为'std :: string GetAttribute(std :: string)'的'this'参数传递'丢弃限定符

时间:2012-03-02 02:03:18

标签: c++ ns-3

我发现部分NS-3 API出现了奇怪的错误。这是我的错误消息:

error: passing ‘const ns3::TopologyReader::Link’ as ‘this’ argument of ‘std::string ns3::TopologyReader::Link::GetAttribute(std::string)’ discards qualifiers

以下是导致问题的代码:

TopologyReader::ConstLinksIterator iter;
int num = 0;
for (iter = topologyReader->LinksBegin (); iter != topologyReader->LinksEnd(); iter++, num++)
  {
    std::istringstream fromName(iter->GetFromNodeName ());
    std::istringstream toName (iter->GetToNodeName ());
    iter->GetToNodeName();
    std::string w = "Weight";
    std::string weightAttr = (iter)->GetAttribute(w); // <- error
    /* snip */
  }

我认为这可能与GetAttribute(std::string)不是const函数的事实有关,根据documentation for TopologyReader::Link,而其他函数GetFromNodeName(void)和{ {1}}被声明为GetToNodeName(void)个函数。但是,我不确定如何解决这个问题。

编辑: 功能签名如图所示(来自链接文档):

const

1 个答案:

答案 0 :(得分:1)

您的分析是正确的。显而易见的解决方法是使GetAttribute成为const函数。它的名字表明它应该是const。但是,改变代码可能不是你的权力。

另一种方法是找到一种获取非const对象来调用函数的方法。也许您可以将iter声明为LinksIterator而不是ConstLinksIterator

作为最后的手段,您可以尝试使用const_cast告诉编译器在一个假定的const对象上调用非const方法是非常安全的。