pasando 'const Enlace' como 'este' argumento de 'std::string GetAttribute(std::string)' descartes calificadores

StackOverflow https://stackoverflow.com/questions/9527003

  •  15-11-2019
  •  | 
  •  

Pregunta

Me estoy poniendo un extraño error con las partes de la NS-3 de la API.Aquí está mi mensaje de error:

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

Y aquí está el código de la causa del problema:

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

Creo que podría tener que ver con el hecho de que GetAttribute(std::string) no es un const función, de acuerdo a la documentación para TopologyReader::Link, mientras que las otras funciones, GetFromNodeName(void) y GetToNodeName(void) se declaran como const funciones.Sin embargo, no estoy seguro de cómo solucionar este problema.

Editar:La función de firmas como se muestra (a partir de la documentación vinculada):

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)  
¿Fue útil?

Solución

Su análisis es correcto.La obvia solución es hacer GetAttribute ser una constante de la función.Su nombre lo sugiere debe se const.Es posible que no esté en su poder para cambiar ese código, sin embargo.

La alternativa es encontrar la manera de llegar a un no-const objeto para llamar a la función.Tal vez usted podría declarar iter como LinksIterator en lugar de una ConstLinksIterator.

Como último recurso, usted podría tratar de usar const_cast para indicar al compilador que es realmente seguro para llamar a un no-const método en un supuesto objeto const.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top