【问题标题】:issue returning CArray返回 CArray 的问题
【发布时间】:2010-08-05 13:24:34
【问题描述】:

我正在尝试从函数返回 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返回值的正确方法。

【问题讨论】:

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


    【解决方案1】:

    呃,首先,如果 RetArrayListMaker 类的成员并且你从 main() 调用它,你不能这样称呼它:short nCode = RetArray(L"Name", myArray);

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

    检查您的头文件中 ListMaker 类中的 RetArray 声明。它可能与您的 cpp 文件中的实现不同,因此您会收到 C2511 错误。

    【讨论】:

    • 是的,我已按照您的建议进行了修改,但仍然出现相同的错误。告诉我如何正确返回和调用 CArray。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我认为问题出在CString&amp;,请尝试改用CArray&lt;CString, LPCTSTR&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-28
        • 2014-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-11
        相关资源
        最近更新 更多