在指针数组中使用对象中的函数
Using functions from an objet inside an array of pointers
如何使用tabEmployes[0]。函数???
CEmploye **tabEmployes[NB_EMPLOYES] = new CEmploye[NB_EMPLOYES];
int main()
{
for (int i = 0; i < NB_EMPLOYES - 1; i++)
{
int j = 0;
string sNom = *LES_EMPLOYES[i, j];
int iNum = atol(*LES_EMPLOYES[i, j + 1]);
int iNiv = atol(*LES_EMPLOYES[i, j + 2]);
CEmploye* unEmploye = new CEmploye(sNom, iNum, iNiv);
tabEmployes[i] = &unEmploye;
}
tabEmployees
是指向指针的指针数组。这意味着tabEmployees[0]
是指向指针的指针。要访问类方法,您必须取消引用指针。你可以使用
(*(tabEmployees[0]))->methodName();
但是,当前代码将tabEmployees[0]
指向局部变量的内存地址,该地址在循环结束时将超出范围。这是未定义的行为,很可能会导致不希望的结果(例如崩溃,或者所有指针都相同)。
我认为您并不真的希望tabEmployees
是一个指向指针的指针数组,尤其是因为您的代码现在不应该编译。
此行:
CEmploye **tabEmployes[NB_EMPLOYES] = new CEmploye[NB_EMPLOYES];
不应该编译,因为您正在将指针数组分配给指针数组。
当你在循环中创建指针时,在我看来你不需要给这个数组赋值。如果您将其更改为:
CEmploye **tabEmployes[NB_EMPLOYES];
现在将编译您的代码。
但是,正如我上面所说的,您仍然存在指向超出范围的局部变量的问题。我建议您的tabEmployees
应定义为:
CEmploye *tabEmployes[NB_EMPLOYES];
随后分配为
tabEmployes[i] = unEmploye;
(注意已删除的&
)。
现在,数组包含指向新分配对象的指针,而不是指向指向该对象的变量的指针。然后,您可以访问以下方法
tabEmployes[i]->methodName();
相关文章:
- 如何创建对象函数指针C++映射?
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 如何将对象函数的实例传递给另一个函数
- 调用模板函数的问题"No matching function for call"参数:迭代器、对象函数
- makefile对我的名称空间对象/函数/构造函数的不确定引用
- 将对象函数转换为函数指针
- 非对象函数/类函数C++
- 线程对象函数 C++
- C 将成员对象函数分配给类成员功能
- 使用基本指针调用派生对象函数
- 可以(通过编译器)使用多少个线程来初始化全局对象(函数main之前)
- C++类对象函数
- 对对象::函数的未定义引用
- 无法弄清楚将多个对象函数作为单独的线程调用的语法
- 在提升作用域出口中调用对象函数
- 使用基指针来使用派生对象函数
- 在for_each lambda 中调用对象函数
- C++:: 模板函数 - 从对象函数获取对象的地址
- Qt5 未解析的外部静态元对象函数
- 通过变量使用对象和对象函数