【问题标题】:Not understanding how pointers and classes work together in this example不了解此示例中的指针和类如何协同工作
【发布时间】:2014-04-10 21:54:33
【问题描述】:

嗯,我被这个难住了,使用 Visual Studio 2012 我的项目只剩下一个错误,我很想测试它。是的,它适用于 C++ 类,我希望我发布了足够的代码。

我得到错误:

C2227 left of ->writeData 必须指向 class/struct/union/generic 类型

在上一个项目中,这一行包含指针数组的元素(我假设为 Employee* 指针),它的工作方式如下:

Employee* myEmployees[MAX_EMPS];
...
myEmployees[i]->writeData(outputEmployee);

所以我实现了一个 Employee* 的向量,并假设它还包含指针:

MyVector<Employee*> employeePtrList;

我稍微间接地做了接下来的几个步骤,但已经与 Debry 教授清除了这一点:

Employee* empPtr1 = new HourlyEmployee(EMP1_ID, EMP1_NAME, EMP1_ADDRESS, EMP1_PHONE, EMP1_HOURS, EMP1_WAGE);
2...
3...
4...

employeePtrList.push_back(empPtr1);
2...
3...
4...

然后在程序的后面,这一行给了我错误:

employeePtrList.at(i)->writeData(outputEmployee);

我尝试了各种方法,如果我只是为了好玩而用 *(employeePtrList) 取消引用它会改变智能感知错误,但我仍然得到相同的结果:

C2227 left of ->writeData 必须指向 class/struct/union/generic 类型

有什么想法吗?我被难住的地方是了解 employeePtrLIst 是一个 Employee 指针,所以它可能在错误的类中寻找?我想也许我没有正确“指向” MyVector 类中的函数?

谢谢

【问题讨论】:

  • employeePtrList.at(i) 返回什么?
  • 如果你在理论上问,我会假设一个指向 Employee 类的指针,实际上这不会运行。我想我需要弄清楚如何形成它,以便它从存在成员函数的 MyVector 类中返回一些东西?
  • 什么是MyVector真的是带有.at函数的向量吗?
  • 将您的示例缩小为演示问题的最小可运行代码并将其发布。您甚至可能在这样做时自己发现问题。
  • 这是一个以 .at 作为成员函数的类,是的。它就像一个带有 push_back 函数以及 getter 和 setter 的向量。

标签: c++ arrays class pointers dereference


【解决方案1】:

如果不确切知道MyVector 的工作原理,乍一看可能会出现一些问题:

.at() 可能会返回对对象的引用(甚至是对象的副本),因此您需要使用 . 运算符。

另一种可能性是,如果 .at() 返回类型为 Employee* 的迭代器,您可能需要取消对迭代器的引用(即 (*employeePtrList.at(i))-&gt;writeData(outputEmployee);取决于实现

【讨论】:

  • 感谢 Qix 你也做得对,很棒的信息!我太新了,不能投票(可耻地说,哈哈)
  • 嘿@provoutah - 只是让你知道如果它对你有帮助,欢迎你接受答案!
猜你喜欢
  • 1970-01-01
  • 2020-02-10
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 2021-10-01
  • 1970-01-01
  • 2015-12-17
相关资源
最近更新 更多