gpt4 book ai didi

c++ - 使用指针数组中对象的函数

转载 作者:行者123 更新时间:2023-11-28 06:18:42 24 4
gpt4 key购买 nike

怎么可能使用 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;
}

最佳答案

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++ - 使用指针数组中对象的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29726669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com