从不同的类访问矢量对象

Accessing an vector-Object from a different class

本文关键字:对象 访问      更新时间:2023-10-16

我用Pointers创建了一个向量,并用一种称为的方法从Modul派生的类DigOut创建了新的Object

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。

您的示例给人的印象是您在函数范围内声明vector。它的生存期在函数调用结束时结束(所有内存都会泄漏)。将其存储为类成员和转发到vectorbeginend成员函数的成员函数beginend。可能将它们封装在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

但是,您可以考虑使用智能指针来确保在父类超出范围时将其删除

如果我理解正确,只需将其公开并在其前面添加此行:

class Modul;