从不同的类访问矢量对象
Accessing an vector-Object from a different class
我用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
。它的生存期在函数调用结束时结束(所有内存都会泄漏)。将其存储为类成员和转发到vector
的begin
和end
成员函数的成员函数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
但是,您可以考虑使用智能指针来确保在父类超出范围时将其删除
如果我理解正确,只需将其公开并在其前面添加此行:
class Modul;
相关文章:
- 按基类对象访问派生类资源时出错
- 使用基类对象访问派生的仅类方法
- 从 const 对象访问非 const 方法
- 如何在C++中使用类对象访问指针数据成员
- 如何通过不同的指针使用类的对象访问结构?(链表)(C++)
- 使用二进制搜索树中的迭代器对象访问左侧节点
- 为什么引用类型在使用临时对象访问时是左值
- 从父对象 c++ 访问子方法
- 无法通过指针或对象 c++ 访问受保护的成员
- 为什么可以从类中的对象访问类的私有变量
- 对类似"struct {double, int}"对象使用reinterpret_cast进行对象访问
- 通过无符号 char 别名进行对象访问,加载和存储时会发生什么?
- 从对象访问结构枚举
- 如何全局创建对象并使用该对象访问全局范围内的公共成员函数
- 在C 中,可以从第三个共享对象访问其他两个不同共享对象
- 如何在C 中提供一个可呼叫的对象访问,例如lambda
- C 向量对象访问
- C++是否可以从同级第二个派生对象访问第一个派生对象的受保护基础数据成员?
- 如何从类内实例化的对象访问私有变量
- 多态性:通过类文本或对象访问静态成员