ошибка C2248: «CObject :: CObject»: невозможно получить доступ к закрытому члену, объявленному в классе «CObject» - PullRequest
0 голосов
/ 02 июня 2011

Я укажу причину моей ошибки. Пожалуйста, исправьте мою ошибку:

CODE

   private:
   CStringArray m_strMnemonicArray;

   public:
   CStringArray getMnemonicSet();
   CStringArray CParserDlg::getMnemonicSet()
   {
      return m_strMnemonicArray;
   }

1 Ответ

0 голосов
/ 02 июня 2011

Я автоматизировал несколько задач в функции, показанной ниже:

    CStringArray CParserDlg::getMnemonicSet();

возвращает CStringArray по ссылке, а не по значению.

   CStringArray& CParserDlg::getMnemonicSet();

Мало того, что это избавит от компилятораошибка, это также практическое правило в C ++ для передачи объектов, таких как CStringArray, либо по (const) ссылке, либо, если нет, по указателю.

Причина в том, что передача по значению приводит к временной копииобъект.Если не знать об этом, передача объектов по значению приведет к нежелательным результатам, как во время выполнения, так и в результате неправильных результатов (т. Е. Ожидается, что переданный объект изменился в функции).

Основная причина ошибкиявляется то, что CObject не копируемый, но вы передаете CStringArray (который является производным от CObject) по значению.Передача по значению означает, что компилятор попытается сделать временную копию объекта.Так как у CObject нет доступного конструктора копирования, компилятор выдаст вам ошибку.

Но для добавления я бы предпочел это, а не CStringArray:

  #include <vector>
  std::vector<CString> CStringVector;

Тогда вы бы не получилиошибка компилятора, так как вектор является копируемым (но вы получите проблему времени выполнения и возможных ошибочных результатов, о которых я упоминал ранее).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...