لماذا لا يمكنني الوصول إلى Var عام باستخدام Getter؟

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

  •  20-09-2019
  •  | 
  •  

سؤال

وجود ملف يحتوي على هذه العبارات:

public:
boost::shared_ptr<TBFControl::TbfCmdHandler> _tbfCmdHandlerPtr;
// will be private later...

boost::shared_ptr<TBFControl::TbfCmdHandler> getTBFCmdHandler()
{ return _tbfCmdHandlerPtr; }

يمكنني استخدامه بهذه الطريقة:

boost::shared_ptr<TBFControl::TbfCmdHandler>myTbfCmdHandlerPtr(
    this->getTBFInstallation()-> _tbfCmdHandlerPtr );

لكن ليس ، كما أريد ، بهذه الطريقة:

boost::shared_ptr<TBFControl::TbfCmdHandler>myTbfCmdHandlerPtr(
    this->getTBFInstallation()->getTBFCmdHandler() );

باستخدام وظيفة getter ، يحدث الخطأ التالي:

"Housekeeping :: tbfinstallation :: gettbfcmdhandler": لا يمكن تحويل "مؤشر" من "Const Housekeeping :: tbfinstallation" إلى "التدبير المنزلي :: tbfinstallation &"

ما يحدث الخطأ هنا؟

هل كانت مفيدة؟

المحلول

بوضوح، this->getTBFInstallation() يعيد مؤشر كونست. تحتاج إلى جعل الوظيفة getTBFCmdHandler كونست كذلك.

boost::shared_ptr<TBFControl::TbfCmdHandler> getTBFCmdHandler() const
{
    return _tbfCmdHandlerPtr;
}

لاحظ ال const الكلمة الرئيسية في نهاية السطر الأول.

يحرر: بإضافة const, ، أنت في الواقع تغيير نوع this من TBFInstallation * إلى TBFInstallation const *. في الأساس ، بإضافة const, ، أنت تقول أنه يمكن استدعاء الوظيفة حتى عندما يكون الكائن الذي يتم استدعاء الوظيفة عليه هو const.

نصائح أخرى

getTBFInstallation() هو (على ما يبدو) إعادة مؤشر const. لكن، getTBFCmdHandler() هي وظيفة عضو غير مؤشر وبالتالي لا يمكن استدعاؤها على مؤشر CONC. الحل: اجعل getTBFCmdHandler() وظيفة عضو const

دون رؤية الكود أعتقد ذلك getTBFInstallation() إرجاع أ const TBFInstallation التي تحاول استدعاء وظيفة غير const.

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