为节省大家宝贵时间,我把代码彻底简化了(比如成员全声明为public),只留下问题。这段代码作为头文件可直接粘贴进MFC程序运行(需加上函数调用)。我想不明白的是:为什么将一个好端端的对象Add进CArray之后,取出来就变成一个像刚new出来似的崭新的对象了?毕竟我已经定义拷贝构造函数和重载=运算符了啊……即使将模板类写成CArray<MyClass, MyClass&>,结果仍然不正确。只好求助大家了。谢谢!#include <afxtempl.h>
class MyClass
{
public:
  int num;  MyClass() {  } // 构造函数
  MyClass(MyClass &myclass) { num = myclass.num; } // 拷贝构造函数
  MyClass operator=(MyClass &myclass) // =运算符重载
  {
      MyClass temp;
      temp.num = myclass.num;
      return temp;
  }
};void ShowExcel()
{
  CArray<MyClass, MyClass> result;
  MyClass myclass;
  myclass.num = 1234;
  result.Add(myclass);
  MyClass obj = result.GetAt(0); // obj.num == 0, 而不是 1234.
}

解决方案 »

  1.   

     CArray<MyClass, MyClass> result;
    改为 CArray<MyClass, MyClass&> result;
    试试
      

  2.   

    我已经解决了 参照这个帖子。http://topic.csdn.net/u/20071031/10/f3bc256f-692d-4fcc-8acd-4c4450965586.html去掉temp,改为return *this; 即可。
      

  3.   

    CArray::GetAt(1)
    CArray::GetAt(2)
    CArray::GetAt(3)
    CArray::GetAt(4)
    CArray::GetAt(6)
    ……………………
    ……………………
    ……………………
    他们的意义是什么啊?
    求教下小弟