تمرير 'كونست لينك' كما ' هذه ' حجة ' الأمراض المنقولة جنسيا:: سلسلة جيتاتريبوت (الأمراض المنقولة جنسيا::سلسلة)' المرتجع التصفيات
سؤال
أنا الحصول على خطأ غريب مع أجزاء من أبي نس - 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
لإخبار المترجم أنه من الآمن حقا استدعاء طريقة غير ثابتة على كائن يفترض أنه ثابت.