c++表达式必须具有指针到对象的类型
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
。
现在您可以清楚地看到,您的变体根本没有意义,因为hoursWorked
只是一个整型而不是数组,因此您不能对其应用[]
运算符。
c_info
是一个指向Employee的指针。您可以将单个已分配对象分配给这样的指针,也可以将多个对象分配给这样的指针(使用数组语法的new
)。所以它指向一个Employees数组。
你解引用了那个指针。由于它指向(多个)Employees数组,因此它也指向第一个条目。然后访问一个整数成员变量,这仍然是可能的。但是,当您尝试在整数值上使用数组下标操作符([]
)时,这是不可能的。
您可能想要访问i
的成员变量——您分配的数组的第一个条目。因此必须反过来:首先使用数组下标操作符,然后访问特定Employee上的成员。
c_info[i]
在低级语言中意味着:取指针c_info
,将i
乘以它所指向的类型的大小(因此它指向i
- entry),并对该地址解引用。这意味着,c_info[i]
实际上是i
-th索引处的Employee(但不是指针)。
那么您想要访问该员工的成员。如果它仍然是指针,则必须使用箭头操作符,但由于使用了数组下标操作符([i]
),因此已经对其进行了解引用,因此点操作符是正确的:
cin >> c_info[i].hoursWorked;
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- 了解 Python 中的对象类型
- 具有纯虚函数和指针数组对象类型的父类的指针数组
- 调用的对象类型 'double' 不是 report() 函数的函数或函数指针
- 基准、值、值类型、对象和对象类型(C++)
- JNI 如何将 Java 对象数组传递给相同对象类型的 C++ 数组
- 在构造过程中更改的对象类型
- 如何构建程序以避免查询对象类型?
- 如何使用Dynamic_cast获得对象类型
- 什么更有效率?在重载函数中或通过在基类函数中检查对象类型来实现
- static_cast实际上不是对象类型的类型是未定义的行为吗?
- 为什么 std::variant 不能容纳数组对象类型,而联合可以?
- 为什么类型转换对象不会更改其地址?有关对象类型的信息存储在哪里?
- 类返回对象类型,但如何返回和检查 null
- 是否可以在辅助功能中概括对象类型
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 当将对象传递给具有参数作为引用类型的函数以及当其类对象类型时,会得到不同的输出
- 如何在运行时指定对象类型
- 我可以获取在重载的新运算符中使用新运算符的对象类型吗?