定义一个CClientItem&的变量用于接收GetAt(idx)的返回值吧。 不清楚为什么编译器选择了const的GetAt()。 也许是你定义成CArray <CClientItem,CClientItem>的原因?试试CArray <CClientItem,CClientItem&>另外你代码的逻辑有问题啊。你把&myArray[n]传入新建线程了,那么万一由于myArray.Add()引起底层数组重新分配的话,前面所有已经创建线程的地址参数都没用了啊?

解决方案 »

  1.   

    首先,定义成CArray<CClientItem,CClientItem&>代码还是不通过,一样的错误;
    其次,定义引用可以,CClientItem& pliItem=pInfo->myArray.GetAt(idx); pliItem.m_hThread=cliItem.m_hThread;
    定义成指针是不是也可以,安全不安全,比如这样:CClientItem* pliItem=&(pInfo->myArray.GetAt(idx));
    pliItem->m_hThread=cliItem.m_hThread;
    最后,那个新建的线程我需要把数组节点值传进线程函数,不传地址怎么办。
      

  2.   

    定义成指针可以,安全。
    既然你需要把数组节点传到线程里,那么有两种方法:
    1,把数组定为全局变量,然后创建线程时传数组下标;缺点是如果删除了当中某个节点那么所有后面节点的线程都会引用错误数据。
    2,把数组元素定为指针类型,指向动态分配的CClientItem结构,然后将这个指针同样传进线程;缺点是每次变动除了需要修改数组元素外还要动态分配/释放结构内存,需要多写几行代码。 不过还是推荐使用这种方法。