Я автоматизировал несколько задач в функции, показанной ниже:
CStringArray CParserDlg::getMnemonicSet();
возвращает CStringArray по ссылке, а не по значению.
CStringArray& CParserDlg::getMnemonicSet();
Мало того, что это избавит от компилятораошибка, это также практическое правило в C ++ для передачи объектов, таких как CStringArray, либо по (const) ссылке, либо, если нет, по указателю.
Причина в том, что передача по значению приводит к временной копииобъект.Если не знать об этом, передача объектов по значению приведет к нежелательным результатам, как во время выполнения, так и в результате неправильных результатов (т. Е. Ожидается, что переданный объект изменился в функции).
Основная причина ошибкиявляется то, что CObject не копируемый, но вы передаете CStringArray (который является производным от CObject) по значению.Передача по значению означает, что компилятор попытается сделать временную копию объекта.Так как у CObject нет доступного конструктора копирования, компилятор выдаст вам ошибку.
Но для добавления я бы предпочел это, а не CStringArray:
#include <vector>
std::vector<CString> CStringVector;
Тогда вы бы не получилиошибка компилятора, так как вектор является копируемым (но вы получите проблему времени выполнения и возможных ошибочных результатов, о которых я упоминал ранее).