vector向量初始化问题
本帖最后由 zhuyuge0 于 2013-06-04 19:44:11 编辑 最近写代码碰到一个问题。声明一个成员为Bitmap*的vector;然后进行初始化
vector <Bitmap*> bm;
bm[i] = new Bitmap(m_CurWidth, m_CurHeight, PixelFormat24bppRGB);结果报错;
如果改成Bitmap temp;
temp = new Bitmap(m_CurWidth, m_CurHeight, PixelFormat24bppRGB);
vector.push_back(temp);则不会报错。但是我想在vector存放的是Bitmap数组,而不是Bitmap地址。
重新声明为vector<Bitmap> bm;bm[i](m_CurWidth, m_CurHeight, PixelFormat24bppRGB);这样进行bitmap初始化又报错,说是Bitamp的这个构造函数式private的。error C2248: 'Gdiplus::Bitmap::operator =' : cannot access private member declared in class 'Gdiplus::Bitmap'
请问该怎么解决?谢谢
[解决办法]
话说,我估计你八成是没给vector resize,运行的时候出错了... 直接push_back吧
[解决办法]
vector <Bitmap*> bm;
bm[i] = new Bitmap(m_CurWidth, m_CurHeight, PixelFormat24bppRGB);
就这两句代码已经是内存访问出错了,此时的bm还没有预留内存空间,直接bm[i]势必会运行期抛错的。
要么bm.reserve或是bm.resize
[解决办法]
在vector是空的时候,不能直接用下标操作直接赋值的。我记得大概就是这样,你可以push_back
[解决办法]
vector <Bitmap*> bm;
bm[i] = new Bitmap(m_CurWidth, m_CurHeight, PixelFormat24bppRGB);结果报错;
===============================================
上面这代码是错误的,内存越界,应该声明为:vector <Bitmap*> bm(size);
[解决办法]
不能直接用[]。。要用push_back。。否则超过预留空间的时候会越界。。
[解决办法]
vector<Bitmap*> bm;
Bitmap *temp = new Bitmap(xxx);
bm.push_back(temp);
以上是我习惯的用法!
我不习惯将对象拷贝一份又一份!
[解决办法]
Bitmap通过把operator=设为私有禁止对Bitmap对象进行复制,所以你b = Bitmap(...)不行。为什么你不vector <Bitmap *> bm; bm.push_back(new Bitmap(...))呢。