2010-05-09 137 views
0

:错误C2064:术语不计算为服用1个参数 的函数:错误C2227:左“ - >名称”必须指向类/结构/联合/通用型如何使用指针和指针aritmetic

我该怎么办解决这一问题,以便该错误不会发生

for(int index = 0; index < (numStudents); index++) 
{ 
    if (student(index + 1)->score >= 90) 
     student(index + 1)->grade = 'A'; 
    else if (student(index + 1)->score >= 80) 
     student(index + 1)->grade = 'B'; 
    else if (student(index + 1)->score >= 70) 
     student(index + 1)->grade = 'C'; 
    else if (student(index + 1)->score >= 60) 
     student(index + 1)->grade = 'D'; 
    else 
     student(index + 1)->grade = 'F'; 
} 

继承人的结构:

struct StudentType 
{ 
    string name; 
    int score; 
    char grade; 
}; 

,这里是指针: StudentType *学生;

+3

'student()'返回什么? – 2010-05-09 19:36:13

+1

您发布了错误的代码部分,这里没有使用名称成员。 – Pieter 2010-05-09 19:37:25

+0

这是一个void函数,但是StudentType *学生和学生类型是 struct StudentType { \t string name; \t int分数; \t char grade; }; – booby 2010-05-09 19:37:58

回答

5

我的猜测是,你需要做的,而不是

student[index + 1] 

student(index + 1) 

你真的应该规定什么是student这样的人能回答这个问题。

1

从您的评论答案看来,学生是一个指针。在这种情况下,student(index + 1)是无效的语法。我想你的意思是student[index + 1]

进一步的批判 - 在C中的基于1的数组是坏的形式。考虑从0开始,像其他所有人一样C

1

学生是方法/函数还是数组?也许这就是你的意思:

 
for (int index = 0; index < numStudents; index++) { 
    // ensure that we don't go past the end of the student array 
    if (index + 1 == numStudents) break; 

    if (student[index + 1]->score >= 90) student[index + 1]->grade = 'A'; 
    else if (student[index + 1]->score >= 80) student[index + 1]->grade = 'B'; 
    else if (student[index + 1]->score >= 70) student[index + 1]->grade = 'C'; 
    else if (student[index + 1]->score >= 60) student[index + 1]->grade = 'D'; 
    else student[index + 1]->grade = 'F'; 
} 

虽然我不明白你为什么要避免第一个学生(学生[0])。你知道数组是基于零的,对吧?如果您将索引变量初始化为1而不是0,您可以达到相同的效果,但不需要所有'索引+1'。

+0

但它需要在指针算术,我做它完全错误,因为我甚至没有意识到,它跳过了0 – booby 2010-05-09 19:44:15

+0

所以,你的意思是你必须使用:

 if ((student + index)->score >= 90) (student + index)->grade = 'A'; 
我觉得更难阅读,但我猜如果你*必须*在那里使用指针算术。 – smountcastle 2010-05-10 13:05:02

0

我很确定它试图告诉您的是student函数没有只需要一个参数。因为它实际上无法调用函数,所以错误的第二部分会告诉你它不能用于左边的->

很难说没有更多细节(具体来说,什么是student),但是假设student是最有可能代表使用括号的student[index + 1]的矢量或数组。