проблема, возвращающая CArray - PullRequest
       17

проблема, возвращающая CArray

2 голосов
/ 05 августа 2010

Я пытаюсь вернуть CArray из функции и пытаюсь вызвать функцию из другого класса

short ListMaker::RetArray(CString szName, CArray<CString, CString&> &szarr_Names) {
    szarr_Names.Add(szName);
    return 0;
}
int main() {
    //..
    CArray<CString, CString&> myArray;
    ListMaker LM;
    short nCode = LM.RetArray(L"Name", myArray);
    //..
}

Я получаю следующие ошибки:

Error   1   error C2664: 'RetArray' : cannot convert parameter 2 from 'CArray<TYPE,ARG_TYPE>' to 'CArray<TYPE,ARG_TYPE>'
Error   2   error C2511: 'short RetArray(CString,CArray<TYPE,ARG_TYPE> &)' : overloaded member function not found in 'ListMaker'

Скажите, пожалуйста, правильный способ определения и доступа к возвращаемому значению CArray.

Ответы [ 3 ]

2 голосов
/ 05 августа 2010

Erm, первый, если RetArray является членом класса ListMaker и вы называете его из main(), вы не можете назвать его так: short nCode = RetArray(L"Name", myArray);

Если RetArrayстатический член, используйте short nCode = ListMaker::RetArray(L"Name", myArray);.Если он нестатический, используйте экземпляр, short nCode = listMakerInstance.RetArray(L"Name", myArray);.

Проверьте свой заголовочный файл на наличие объявления RetArray в классе ListMaker.Он может отличаться от реализации в вашем файле cpp, поэтому вы получаете ошибку C2511.

1 голос
/ 06 августа 2010

Я думаю, что проблема в CString&, попробуйте использовать CArray<CString, LPCTSTR> вместо.

1 голос
/ 05 августа 2010

Вы не можете хранить ссылку в типе массива, и CArray следует избегать любой ценой, поскольку он использует memcpy для изменения размера, а не для копирования конструкции, нарушая ваш код в тот момент, когда вам что-то нужно с помощью полезного конструктора.

...