wom*_*dom 2 c++ class vector push-back
我想创建一个对象数组,我想使用某个构造函数.
std::vector<Modul> arrDigOut;
arrDigOut.push_back(Modul(IDC_CHECK1, this, "GVL.DigOut1", pAddr));
Run Code Online (Sandbox Code Playgroud)
只要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;
};
};
Run Code Online (Sandbox Code Playgroud)
这是因为对象切片.你需要有一个指针向量或指向基类的智能指针:
std::vector<Modul*> arrDigOut;
arrDigOut.push_back(new Modul(IDC_CHECK1, this,"GVL.DigOut1",pAddr));
arrDigOut.push_back(new DigOut());
Run Code Online (Sandbox Code Playgroud)
如果不使用智能指针,请记住释放内存.
当你有一个std::vector<Modul> arrDigOut;并且在派生类型的对象上插入时,它将被切片并成为一个Modul.Modul对象的一部分被复制到向量中,其余部分将丢失.