具有派生类的push_back
push_back with derived class
我想创建一个对象数组,并使用某个构造函数。
std::vector<Modul> arrDigOut;
arrDigOut.push_back(Modul(IDC_CHECK1, this, "GVL.DigOut1", pAddr));
只要DigOut
不是派生类,这就可以工作。当我派生它并使用类DigOut
时,它失败了:
class Modul
{
protected:
int id;
int nErr;
void* plcVar;
bool bDigOut;
PAmsAddr pAddr;
ULONG lHdlVar;
CButton* pBt;
public:
Modul();
//Modul(int ID, Cbeckhoff_frontendDlg* pCbeckhoff,void* pVar,PAmsAddr pAdr)
//{
// SetID(ID,pCbeckhoff);
// plcVar = pVar;
// pAddr = pAdr;
//};
int GetID() { return (id); };
void* GetplcVar() { return plcVar; };
void SetID(int ID, Cbeckhoff_frontendDlg* pCbeckhoff);
int InitCheck(Cbeckhoff_frontendDlg* pCbeckhoff);
CButton* GetpBt(){return pBt;};
void SetButton( Cbeckhoff_frontendDlg* pCbeckhoff);
};
class DigOut : protected Modul
{
public:
DigOut();
DigOut(int ID, Cbeckhoff_frontendDlg* pCbeckhoff,void* pVar,PAmsAddr pAdr)
{
SetID(ID,pCbeckhoff);
plcVar = pVar;
pAddr = pAdr;
};
};
这是因为对象切片。你需要有一个指向基类的指针向量或智能指针:
std::vector<Modul*> arrDigOut;
arrDigOut.push_back(new Modul(IDC_CHECK1, this,"GVL.DigOut1",pAddr));
arrDigOut.push_back(new DigOut());
如果不使用智能指针,请记住释放内存。
当您有一个std::vector<Modul> arrDigOut;
并插入派生类型的对象时,它将被切片并成为Modul
。对象的Modul
部分将复制到向量中,其余部分将丢失。
相关文章:
- 推导 std::vector::back() 的返回类型
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- vector.push_back(vector.back()+1) 是未定义的行为吗?
- C++自己的对象堆栈.在 push() 上复制了什么?
- C++ push() 和 pop() 方法使用指针的动态 LinkedList 的问题
- 如何像在javascript中一样"push" c ++映射
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- vector.back()和vector.end()有什么区别
- 列表大小为 1,但 front() 和 back() 不相等
- 返回C++中没有 back() 方法的容器的最后一个元素?
- 在非空 std::list 上使用 std::list.back<int>() 时"Segmentation Fault"
- 模板堆栈类的复制构造函数中的 pop() 和 push() 不起作用
- 我们可以使用Back() - 值索引在其上执行向量插入
- 当我运行以下代码添加str.front() str.back时,它给了我200个,但为什么
- push(ing)back在循环中对象指针
- 在 C++ 中将元素添加到空向量:为什么 push.back 有效而 [] 无效
- 我似乎无法让 v.push.back() 处理字符串
- String::push_back() does not push back
- 向量resize(), push.back(), reserve()方法