大家好,我这里遇到一个问题,相当于class Curve  :public CObject 
{
public:
//数据
int getn(){return(2)};
}CArray <Curve ,Curve> m_arr;
m_arr.getn();            //这里出的错结果编译不通,我是初次用这个,不知怎样解决,谢谢大家。

解决方案 »

  1.   

    GetAt()参数类行为POSITION. CArray 中获得第i个对象可用
    m_arr.GetAt(m_arr.FindIndex(i));
      

  2.   

    应该是——》
        m_arr.GetAt(m_arr.FindIndex(i)).getn();
    吧?
      

  3.   

    sorry,我写错了,实际是class Curve  :public CObject 
    {
    Curve();
    public:
    //数据
    int getn()
    {return(2);}
    };///////////
    CArray <Curve ,Curve> m_arr;
    m_arr.SetSize(3);
    m_arr.GetAt(1).getn();            //这里出的错还是同一个错误,刚才输入错了,谢谢大家
      

  4.   

    m_arr.GetAt(1).getn();            //这里出的错
    改为m_arr.GetAt(m_arr.FindIndex(i)).getn();
      

  5.   

    Sorry忘了将i变为1,重写
    m_arr.GetAt(m_arr.FindIndex(1)).getn();
    注意m_arr.SetSize(3);没有m_arr.AddTail(...);是无用的数组
      

  6.   

    FindIndex返回第i个元素在数组中的位置属性,为POSITION对象
      

  7.   

    m_arr.GetAt(1).getn();            //这里出的错为何不对FindIndex(1)) 我这里找不到,总是编译不过去class Curve  :public CObject 
    声明时把基类CObject 去掉就没毛病了,不知为什么,谢谢.
      

  8.   

    要是取第一个元素的位置可以用
    POSITION pos=arr.GetHeadPosition();
      

  9.   

    我声明的是 CArray 类,不是COblist;
      

  10.   

    对不起看错了下面是成功的代码
    int var=1;
    CArray <int,int &> m_Array;
    m_Array.Add(var);
    var=2;
    m_Array.Add(var);
    int m_pos=0;
    int m_intVal=m_Array.GetAt(m_pos);//m_intVal=1
      

  11.   

    不能用1是因为GetAt的函数原型中该参数为引用,所以要用变量即可。
      

  12.   

    对不起,我的“不能用1是因为GetAt的函数原型中该参数为引用,所以要用变量即可。“是错的可以直接用1。
      

  13.   

    这是我调通的代码:class Curve 
    {
    public:
    Curve(){};
    //数据
    int getn()
    {
    return(2);
    };
    };//Test code
    CArray <Curve ,Curve&> m_arr;
    Curve m_x;
    m_arr.Add(m_x);
    Curve m_y;
    int xxxx;
    xxxx=m_arr.GetAt(0).getn();
      

  14.   

    你好,非常感谢你不厌其烦的帮助,谢谢,我也编译通过了类似的代码,但是得把基类CObject 去掉,而实际上它还有用,我声明的是
    class Curve  :public CObject 
    {   public:
         Curve();
    //数据
    int getn()
    {return(2);}
    };
       如果去掉CObject 就没毛病了,
      

  15.   

    CArray<CTest*,CTest*> queue;
    queue.Add(&t1);
    queue.Add(&t2);
    queue.Add(&t3);
    queue.GetAt(0);
    其中CTest类也是派生自CObject类,当我使用CArray<CTest,CTest> queue时也
    出现问题,所以改用了上面的折中的办法,你看看有没有帮助
      

  16.   

    CArray <Curve * ,Curve *> m_arr;
    Curve m_x;
    m_arr.Add(&m_x);
    Curve m_y;
    int xxxx;
    xxxx=m_arr.GetAt(0)->getn();是可以的
      

  17.   

    mousefj(冯杰):你好,我的QQ是:47157860,能不能加你为好友,一起讨论一下技术问题?
      

  18.   

    CArray<CDib,CDib&>   m_DibArr;
    CDib*  Dib = new CDib();
    if(Dib->Load(m_FileNameStrArr[i]) == TRUE)
    m_DibArr.Add(*Dib);CDib = m_DibArr[0];
      

  19.   

    mousefj(冯杰):那么你用什么网络聊天工具?
      

  20.   

    CArray要求你为CTest类增加拷贝构造函数。
    因为你定义的CArray要求传递CTest类型。由于值传递是需要进行复制的,而你的CTest类没有拷贝构造函数,因此不支持复制。
    简单的办法是定义CArray<CTest*,CTest*> queue;
    或者在CTest类中增加拷贝构造函数:
    CTest(CTest &test);
      

  21.   

    这个问题我解决了,具体解答如下:
    一、存在问题:
    1、在CArray <Curve ,Curve> m_arr语句中的第二参数即Curve表明往m_arr中写入数据时,函数需要一个
    Curve对象,这就要求传值调用,因此要求Curve类中应该有复制构造函数Curve(const Curve&)。
    2、这样编译还是有一个错,在CArray类中的SetAtGrow函数中有一个类似于Curve=Curve的语句,然而在Curve类中没有重载运算符“=”,所以在这时需要重载“=”运算符。
    具体代码如下:
    class Curve  :public CObject 
    {
    public:
    //数据
    int i;
    Curve(const Curve&);
    operator =(Curve&);
    int getn(){return(2)};
    }Curve::Curve(const Curve& temp)
    {
          数据的复制如:
          i=temp.i;
    }Curve::operator =(Curver& temp)
    {
          对象之间的拷贝即对象内部数据的拷贝如:
          i=temp.i;
    }
    两个函数的代码是一样的当用处不一样,要好好理解程序运行的过程才能真正做好。
      

  22.   

    谢谢答复,我的信箱是ruanjiankaifa@sohu.com
    欢迎联系