簡體   English   中英

從不同的類訪問向量對象

[英]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 它的生命周期在函數調用結束時結束(並且所有內存都被泄漏)。 將其存儲為類成員,並且成員函數的beginend指向vectorbeginend成員函數。 可能將它們包裝在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM