0

NS-3APIの一部で奇妙なエラーが発生します。これが私のエラーメッセージです:

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 */
  }

TopologyReader :: Linkのドキュメントによると、他の関数は関数として宣言されているため、関数でGetAttribute(std::string)はないという事実に関係しているのではないかと思います。ただし、この問題を解決する方法がわかりません。constGetFromNodeName(void)GetToNodeName(void)const

編集:関数のシグネチャは次のとおりです(リンクされたドキュメントから):

std::string ns3::TopologyReader::Link::GetFromNodeName (void) const
std::string ns3::TopologyReader::Link::GetToNodeName (void) const
std::string ns3::TopologyReader::Link::GetAttribute (std::string name)  
4

1 に答える 1

1

あなたの分析は正しいです。明らかな修正はGetAttribute、const関数にすることです。その名前はそれがconstであるべきであることを示唆しています。ただし、そのコードを変更することはあなたの力ではないかもしれません。

別の方法は、関数を呼び出す非constオブジェクトを取得する方法を見つけることです。たぶん、の代わりにiterとして宣言することができます。LinksIteratorConstLinksIterator

const_cast最後の手段として、を使用して、おそらくconstオブジェクトでnon-constメソッドを呼び出すのが本当に安全であることをコンパイラーに伝えることができます。

于 2012-03-02T02:10:36.543 に答える