تمرير 'كونست لينك' كما ' هذه ' حجة ' الأمراض المنقولة جنسيا:: سلسلة جيتاتريبوت (الأمراض المنقولة جنسيا::سلسلة)' المرتجع التصفيات

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

  •  15-11-2019
  •  | 
  •  

سؤال

أنا الحصول على خطأ غريب مع أجزاء من أبي نس - 3.هنا رسالة الخطأ الخاصة بي:

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 وظيفة ، وفقا ل وثائق الطوبولوجيةالقارئ:: حلقة الوصل, ، في حين أن الوظائف الأخرى, GetFromNodeName(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)  
هل كانت مفيدة؟

المحلول

التحليل الخاص بك هو الصحيح.الإصلاح الواضح هو جعل GetAttribute كن وظيفة ثابتة.اسمها يوحي بذلك ينبغي كن كونست.قد لا يكون في وسعكم لتغيير هذا الرمز ، وإن كان.

البديل هو إيجاد طريقة ما للحصول على كائن غير ثابت لاستدعاء الوظيفة.ربما يمكنك أن تعلن iter كما LinksIterator بدلا من ConstLinksIterator.

كملاذ أخير ، يمكنك محاولة استخدام const_cast لإخبار المترجم أنه من الآمن حقا استدعاء طريقة غير ثابتة على كائن يفترض أنه ثابت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top