我发现部分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
答案 0 :(得分:1)
您的分析是正确的。显而易见的解决方法是使GetAttribute
成为const函数。它的名字表明它应该是const。但是,改变代码可能不是你的权力。
另一种方法是找到一种获取非const对象来调用函数的方法。也许您可以将iter
声明为LinksIterator
而不是ConstLinksIterator
。
作为最后的手段,您可以尝试使用const_cast
告诉编译器在一个假定的const对象上调用非const方法是非常安全的。