源代码如下:
struct Point3d
{ CString PointName;
CString Code;
double X;
double Y;
double Z;
Point3d()
{
PointName=_T("");
Code=_T("");
X=0.0;
Y=0.0;
Z=0.0;
}
Point3d(Point3d   &point) 

*this   =   point; 

Point3d   &   operator   =   (Point3d&   point) 

PointName=point.PointName;
Code=point.Code;
X=point.X;
Y=point.Y;
Z=point.Z;
return *this;

};typedef CArray<Point3d,Point3d &>  CPoint3dArray;错误如下:
1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxtempl.h(267) : error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)
1>        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(561) : 参见“CObject::CObject”的声明
1>        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(532) : 参见“CObject”的声明
1>        此诊断出现在编译器生成的函数“CArray<TYPE,ARG_TYPE>::CArray(const CArray<TYPE,ARG_TYPE> &)”中
1>        with
1>        [
1>            TYPE=Point3d,
1>            ARG_TYPE=Point3d &
1>        ]

解决方案 »

  1.   

    就这点代码是没问题的,报错原因是CPoint3dArray的对象在函数间传递时要传引用或指针,不能传值。
    至于为什么错误提示已经很清楚了,CArray的根基类是cobjct,这个类的拷贝构造和operator = 是private的,你在上层间接调用CArray的拷贝构造或operator = 会调用基类的实现,而基类的实现是private,所以
      

  2.   


    是不是将传值改为传引用就行了?
    使用到的CPoint3dArray对象的函数有一个,我改成了传引用了,但是依然报错
    bool FindPoint(CPoint3dArray &PtArray,Point3d &Point)
    另外,定义有一个对话框类中的成员CPoint3dArray m_ObsPointArray;
      

  3.   

    你看下哪些地方会调用CArray的拷贝构造或operator =。比如
    CPoint3dArray array = m_ObsPointArray;这样的代码就不行
      

  4.   

    多谢dahaiI0(渎神者),问题已解决。
    由于代码中有一个语句也出现了传值的错误,所以导致了相同的问题,我还误以为是CArray存在错误
    ReadKnownPoint(CStdioFile KPFile)
    改为ReadKnownPoint(CStdioFile &KPFile)就通过了
    基本功不扎实啊,汗!