[英]C++ Expression must have pointer-to-object type
亲爱的 stackoverflow 乐于助人的社区,
这是我第一个使用带有结构的指针的程序,尽管进行了大量研究,但我还是找不到我要找的东西。 如果这已经得到回应,请原谅我。
我有一个学校项目,我必须定义结构而不是使用指针数组来存储数据。 在这个循环中,我收到以下错误:
表达式必须具有指向对象的类型
for (int i = 0; i < nbClerk; i++)
{
cout<<"Number of hours: ";
cin>>c_info->hoursWorked[i];
}
break;
这是整个代码。 非常感谢您的帮助
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
//structure defining Employee
struct Employee
{
int hoursWorked;
int hourRate;
double overtime;
string name;
int empID;
};
//Function collecting and calculating info
void employeeInfo(int nbOperator, int nbClerk){
char classOfEmployee;
Employee *c_info;
c_info = new (nothrow) Employee[nbClerk];
Employee *o_info;
o_info = new (nothrow) Employee[nbOperator];
cout<<"Select the class of employee (C=Clerk, O=Operator)";
cin>>classOfEmployee;
switch (tolower(classOfEmployee))
{
case 'c':
for (int i = 0; i < nbClerk; i++)
{
cout<<"Number of hours: ";
cin>>c_info->hoursWorked[i];
}
break;
}
}
int main(){
int nb1,nb2;
cout<<"Nb Employee and nb of nb of operator: ";
cin>>nb1>>nb2;
nbEmployee(nb1, nb2);
system("pause");
}
你可能的意思是:
c_info[i].hoursWorked;
由于c_info
是一个数组,通过执行c_info[i]
您将访问c_info
数组中Employee
类的第i
个实例(对象),然后获得hoursWorked
through .
操作员。
现在您可以清楚地看到您的变体根本没有意义,因为hoursWorked
只是一个整数类型而不是数组,因此您不能对其应用[]
运算符。
c_info
是指向 Employee 的指针。 您可以将单个分配的对象分配给这样的指针,或者在您的情况下,分配多个对象(使用数组语法new
)。 所以它指向一个Employees数组。
您取消了该指针的引用。 由于它指向一个(多个)雇员数组,它也指向第一个条目。 然后你访问一个整数成员变量,这仍然是可能的。 但是随后您尝试对整数值使用数组下标运算符 ( []
),这是不可能的。
您可能打算访问已分配数组的第i
个条目的成员变量。 所以你必须扭转这个局面:首先使用数组下标运算符,然后访问该特定员工的成员。
c_info[i]
在低级词中的意思是:取指针c_info
,加上它指向的类型大小的i
倍(因此它指向第i
个条目)并取消引用该地址。 这意味着, c_info[i]
实际上是第i
个索引处的 Employee (但不是指针)。
然后您想访问该员工的成员。 如果它仍然是一个指针,您将不得不使用箭头运算符,但由于您使用了数组下标运算符 ( [i]
),您已经取消了它的引用,因此点运算符是正确的:
cin >> c_info[i].hoursWorked;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.