[英]Accessing an vector-Object from a different class
我用Pointers创建了一个向量,并使用一种方法从Modul派生的DigOut类创建了新Objects
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。
如果我正确理解,请将其公开,并在其前面添加以下行:
class Modul;
您的示例给人的印象是您在函数范围内声明了vector
。 它的生命周期在函数调用结束时结束(并且所有内存都被泄漏)。 将其存储为类成员,并且成员函数的begin
和end
指向vector
的begin
和end
成员函数。 可能将它们包装在dereference_iterator
以隐藏它们是指针的事实。
class foo {
public:
foo() {
// add things to s_
}
~foo() {
// dont forget to delete everything in s_
}
typedef std::vector<my_stuff*>::iterator iterator;
typedef std::vector<my_stuff*>::const_iterator const_iterator;
iterator begin() { return s_.begin(); }
iterator end() { return s_.end(); }
const_iterator begin() const { return s_.begin(); }
const_iterator end() const { return s_.end(); }
// or to hide the pointers
typedef boost::indirect_iterator< std::vector<my_stuff*>::iterator > iterator;
iterator begin() { return boost::make_indirect_iterator(s_.begin()); }
iterator end() { return boost::make_indirect_iterator(s_.end()); }
private:
std::vector<my_stuff*> s_;
};
您可以按照说明定义成员变量。 在类声明之上,只需提供一个前向声明,
class Modul;
这是为了让编译器知道将在某个地方定义此类。
成员变量不需要是公共的,因为可以从同一类中的另一个函数访问它。
并将成员声明为:
std::vector<Modul*> parrDigOut; //No need of pointers
但是,您可以考虑使用智能指针来确保当父类超出范围时将其删除
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.