我用指针创建了一个向量,我在一个名为
的方法中从Modul派生的DigOut类中创建了新的对象BOOL Cbeckhoff_frontendDlg::OnInitDialog()
{
//...
std::vector<Modul*> arrDigOut;
arrDigOut.push_back(new DigOut(IDC_CHECK1, this,"GVL.DigOut1",pAddr));
//...
for(iNumDO = 0;iNumDO<1;iNumDO++) arrDigOut[iNumDO]->InitCheck(this);
//...
}
如何从不同的方法访问矢量,如:
void Cbeckhoff_frontendDlg::OnBnClickedButton3()
{
for(iNumDO = 0;iNumDO<1;iNumDO++) arrDigOut[iNumDO]->SetID();
}
我考虑使用公共指针或setter和getter,但我不能像这样创建成员变量:
std::vector<Modul*> * parrDigOut;
在抱怨的情况下,未宣布Modul。
答案 0 :(得分:0)
如果我理解正确,只需将其公开并在其前添加此行:
class Modul;
答案 1 :(得分:0)
您的示例给出了您在功能范围内声明vector
的印象。它的生命周期在函数调用结束时结束(并且所有内存都被泄漏)。将其存储为类成员,并将成员函数begin
和end
转发到begin
的{{1}}和end
成员函数。可能将它们包裹在vector
中以隐藏它们是指针的事实。
dereference_iterator
答案 2 :(得分:0)
您可以按照描述定义成员变量。 在类声明之上只提供一个前向声明,
class Modul;
这是为了让编译器知道这样的类将在某个地方定义。
成员变量不需要是公共的,因为它是从同一个类中的另一个函数访问的。
只需将该成员声明为:
std::vector<Modul*> parrDigOut; //No need of pointers
但是,您可以考虑使用智能指针来确保在父类超出范围时将其删除