2010-08-05 48 views
2

我试图从一个函数返回一个CArray,并试图从另一个类调用该函数问题返回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返回值的正确方法。

回答

2

呃,所有如果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错误。

+0

是的,我修改了你的建议,但我仍然得到相同的错误。只要告诉我如何正确地返回并调用CArray。 – osum 2010-08-06 05:07:24

1

你不能在数组类型中存储引用,因为它使用memcpy来调整大小而不是以任何代价绝对避免,而不是拷贝构造,当你需要一些有用的构造函数的时候破坏你的代码。

1

我认为问题在于CString&,请尝试使用CArray<CString, LPCTSTR>代替。