亲爱的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");
}
答案 0 :(得分:6)
你可能意味着:
c_info[i].hoursWorked;
由于c_info
是一个数组,通过执行c_info[i]
,您将访问i
数组中Employee
类的c_info
个实例(对象) ,然后通过hoursWorked
运算符获取.
。
现在您可以清楚地看到您的变体根本没有意义,因为hoursWorked
只是一个整数类型而不是数组,因此您无法将[]
运算符应用于它。
答案 1 :(得分:2)
c_info
是指向Employee的指针。您可以将单个已分配的对象分配给此类指针,或者在您的情况下为多个分配对象(new
使用数组语法)。所以它指向一系列员工。
你取消引用那个指针。由于它指向(多个)Employees的数组,它也指向第一个条目。然后你访问一个整数成员变量,这仍然是可能的。但是,您尝试在整数值上使用数组下标运算符([]
),这是不可能的。
您可能想要访问已分配数组的i
条目的成员变量。所以你必须解决这个问题:首先使用数组下标运算符,然后访问该特定Employee上的成员。
c_info[i]
表示:取指针c_info
,添加i
次指向它所指向类型的大小(因此它指向i
- 入口)和解除引用地址。这意味着,c_info[i]
实际上是i
- 索引处的员工(但不是指针)。
然后您想要访问该员工的成员。如果它仍然是一个指针,你将不得不使用箭头运算符,但由于你使用了数组下标运算符([i]
),你已经取消引用它,你的点运算符是正确的:
cin >> c_info[i].hoursWorked;