编译环境:vc2010、mfc单文档应用程序
问题:将一个结构体变量压入vector出错具体:
1. 定义结构体:
typedef struct LineTooltip
{
CRgn rgn_line; // CRgn区域的线
CString sBeginElementID; // 线对应的起始元素ID
CString sEndElementID; // 线对应的截止元素ID
} LineTooltip;2. 头文件中定义vector:
vector<LineTooltip> vLineTooltip;3. 实现文件中将结构体变量压入vector:
CPoint point1(0, 0);
CPoint point2(0, 2);
CPoint point3(100, 2);
CPoint point4(100, 0);CPoint pointLine[4] = {point1, point2, point3, point4};LineTooltip tempLineTooltip;
tempLineTooltip.rgn_line.CreatePolygonRgn(pointLine, 4, WINDING);
tempLineTooltip.sBeginElementID = L"";
tempLineTooltip.sEndElementID = L"";
vLineTooltip.push_back(tempLineTooltip); // 运行到此句出错4. 提示错误:
1>c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxwin.h(362): error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)
1>          c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(534) : 参见“CObject::CObject”的声明
1>          c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(509) : 参见“CObject”的声明
1>          此诊断出现在编译器生成的函数“CGdiObject::CGdiObject(const CGdiObject &)”中

解决方案 »

  1.   

    构造函数CGdiObject定义前要加public
      

  2.   

    class CRgn : public CGdiObject,class CGdiObject : public CObject
    在MFC里,CObject的拷贝构造为私有,所以凡是从CObject派生的类,都不能通过拷贝构造来创建新实例,这样做是为了防止浅拷贝,如果要传递一个参数,一般传引用或者指针。
    vLineTooltip.push_back(tempLineTooltip)这里有调用拷贝构造,然后把这个刚构造成对象插入到vector,自己实现tempLineTooltip的构造拷贝,CRgn 用指针或引用
      

  3.   

    vector<LineTooltip> vLineTooltip;
    -----------------
    定义成指针应该可以
    vector<LineTooltip*> vLineTooltip;
    push_back加入的动态分配一下,最近记得释放内存资源