问题返回CArray

时间:2010-08-05 13:24:34

标签: c++ windows visual-c++ mfc compiler-errors

我正在尝试从函数返回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 个答案:

答案 0 :(得分:2)

呃,如果RetArray是[{1}}班级的成员并且你从ListMaker调用它,那么你就不能这样称呼它:main()

如果short nCode = RetArray(L"Name", myArray);是静态成员,请使用RetArray。它是非静态的,使用实例short nCode = ListMaker::RetArray(L"Name", myArray);

检查short nCode = listMakerInstance.RetArray(L"Name", myArray);课程中RetArray声明的头文件。它可能与您的cpp文件中的实现不同,因此您会收到C2511错误。

答案 1 :(得分:1)

你不能在数组类型中存储引用,并且不惜一切代价绝对避免使用CArray,因为它使用memcpy来调整大小而不是复制构造,在你需要一些有用的构造函数时就破坏你的代码。

答案 2 :(得分:1)

我认为问题出在CString&,请尝试使用CArray<CString, LPCTSTR>