如何使用tabEmployes [0] .Function ???
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;
}
答案 0 :(得分:1)
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();