[英]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.