不理解在这个例子中指针和类是如何协同工作的



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

我得到错误:

->writeData左侧的C2227必须指向类/结构/联合/泛型类型

在上一个项目中,这一行有指针数组的元素(我假设是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)取消引用它,它会改变intellisense错误,但我仍然得到相同的结果:

->writeData左侧的C2227必须指向类/结构/联合/泛型类型

有想法吗?我感到困惑的是,employeePtrLIst是一个Employee指针,所以它可能在错误的类中查找?我想也许我没有正确地"指向"MyVector类中的函数?

感谢

如果不知道MyVector是如何工作的,乍一看可能会出现一些问题:

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

另一种可能性是,如果.at()返回类型为Employee*的迭代器,则可能需要根据实现来取消引用迭代器(即(*employeePtrList.at(i))->writeData(outputEmployee);

最新更新