问题:
1,vc里如何在函数中把CArray<CString,CString>做为返回值呢,
2,别的函数如何调用这种返回值的函数呢
比如:
CArray<CString,CString>myArray;//声明类型。
myArray& getValue()
{
myArray str;
.......
.
return str;//直接返回str好象不行。但别的函数如何调用getValue();呢
比如:
CArray<CString,CString>myArray;
myArray mm = getValue();//不行的。我改为:
myArray mm;
mm.Copy(getValue());//老提示严重错误
高手帮助下。解决给分。

解决方案 »

  1.   

    CStringList 很好用,还能串行化
      

  2.   

    CArray <CString,CString> 作为函数参数,用引用的方式,函数中修改, 函数调用完了就可以读取这个参数值
    fun(CArray <CString,CString>& array, ...)
      

  3.   

    你的代码有几个错误:
    CArray <CString,CString>myArray;//声明类型。 
    myArray& getValue() 

    myArray str; 
    ...
    返回类型怎么是一个变量名呢?
    应该这样吧:
    typedef CArray <CString,CString>  myArray;另外,返回一个局部变量的引用,绝对是不可以的,函数返回之后,对象就被释放了,那么它的引用也是无效的。运行时肯定出错。
      

  4.   

    MFC里面有一个CStringArray,可以直接使用。
      

  5.   

    不能直接返回,可以考虑使用输出参数。
    void getValue(CStringArray & strArr)
    {
    ...
      

  6.   

    解决方案:
    1、用全局的 CStringArray 或 CArray<CString,CString>,个人觉得这个似乎前面的更方便一些;
    2、用传引用代替传值。这样既可以达到返回 CStringArray 或 CArray<CString,CString> 的目的,又可以避免对象拷贝,提高运行效率。示例://调用的地方
    CStringArray arMyArray;
    CallMyFunc(arMyArray);//函数体
    BOOL CallMyFunc(CStringArray& ar)
    {
        ar.Add(_T("haidejintou"));
        ar.Add(_T("海的尽头"));
        //你其他的检查代码    return TRUE;
    }
      

  7.   

    首先我不赞同使用全局变量的方法,这只是你没有找到正确方法的情况下的变通方法,不是好的解决方法。如果有可能,应该尽量避免全局变量你的问题在于:你不应该用它做返回值,而应该把他作为引用型的参数。直接返回数组变量在任何时候都不是好主意,因为这涉及到大量的拷贝
    正确的用法应该是:void getValue(myArray& array)
    {
          .....
    }调用者使用的方法是:myArray anArray;
    getValue(anArray);需要你代码中这种返回引用的方式的唯一场景是类成员变量是个array,你需要返回一个array的引用。如果这是一个临时产生的array,这自然是不可用引用作为返回类型的(这不特殊于你这个问题,而是所有的临时变量都不能返回引用)
      

  8.   

    需要你代码中这种返回引用的方式的唯一场景是类成员变量是个array,你需要返回一个array的引用。如果这是一个临时产生的array,这自然是不可用引用作为返回类型的(这不特殊于你这个问题,而是所有的临时变量都不能返回引用) 
    高见。