编译环境: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 &)”中
问题:将一个结构体变量压入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 &)”中
解决方案 »
- 请教this指针和静态成员函数问题!
- 'IDataSourceLocatorPtr' : undeclared identifier
- 如何构造http数据包
- 如何动态实现模型的删除?救命啊!
- 怎样获取CEdit中光标所在位置的字符序号
- 结构体凋用问题!!!!!!
- 大峡请注意是否有专门识别数据库文件类型的软件
- 怎么让主菜单在窗体下方显示啊?请指教!!
- 毕设还差最后一步 愿出2000元 找人实现
- Server/Client模式,想实现客户机与主机时钟同步,怎样实现???
- 求助Visual Studio 2010中GetMenu()和GetSubMenu(0)引发异常
- 调用ShowWindow(SW_SHOWMAXIMIZED)产生一个任务栏窗口?
在MFC里,CObject的拷贝构造为私有,所以凡是从CObject派生的类,都不能通过拷贝构造来创建新实例,这样做是为了防止浅拷贝,如果要传递一个参数,一般传引用或者指针。
vLineTooltip.push_back(tempLineTooltip)这里有调用拷贝构造,然后把这个刚构造成对象插入到vector,自己实现tempLineTooltip的构造拷贝,CRgn 用指针或引用
-----------------
定义成指针应该可以
vector<LineTooltip*> vLineTooltip;
push_back加入的动态分配一下,最近记得释放内存资源