访问包含在数组中的指向类对象的类成员函数的正确语法是啥?
Posted
技术标签:
【中文标题】访问包含在数组中的指向类对象的类成员函数的正确语法是啥?【英文标题】:What is the correct syntax for accessing a class member function for a pointer-to-class object contained within an array?访问包含在数组中的指向类对象的类成员函数的正确语法是什么? 【发布时间】:2016-11-12 15:02:20 【问题描述】:我有以下函数,stdDev,它接受指向 Student 类对象的指针数组。学生类有一个成员函数 getScores(),它以双倍的形式返回学生的分数。
下面是代码:
double stdDev(Student array[], int SIZE)
double sum, std_sum, mean, std_mean = 0;
double *std_scores = NULL;
std_scores = new double[SIZE];
for (int i = 0; i < SIZE; i++)
sum += array[i]->getScore;
mean = sum / SIZE;
for (int i = 0; i < SIZE; i++)
std_scores[i] = pow((array[i]->getScore - mean), 2);
std_sum += std_scores[i];
std_mean = std_sum / SIZE;
return sqrt(std_mean);
在上述代码的第 8 行和第 13 行,我收到以下错误:
expression must have pointer type
和
'*': illegal operation on bound member function expression
我是 C++ 指针语法的新手。感谢您提供任何帮助。
【问题讨论】:
你没有一个“指向类对象的数组”,你有一个对象数组。array[i].getScore()
是我的猜测,没有Student
类的定义。
【参考方案1】:
您的问题的简短答案是:
sum += answer[i].getScore;
除非你需要调用函数(而不只是引用它),所以应该是:
sum += answer[i].getScore();
其他问题:
您没有将sum
初始化为零。
您泄露了 std_scores。以相反的优先顺序:
在函数结束时使用delete [] std_scores
将其删除。
将其声明为`std::vector std_scores(SIZE);
根本不要使用数组。只需使用double score2 = pow((array[i].getScore() - mean), 2);
最后一点:
C++ 不是 C89 - 你应该延迟声明你的变量,直到你可以给它们一个值。std_scores
是一个特别明显的例子——你初始化为 NULL,然后立即分配一个新值。除了sum
和std_sum
(和i
),您不需要任何非常量变量。
使用std::accumulate
代码会更好
有更好的算法来计算平均值和标准差,这些算法在数值上更稳定。
【讨论】:
以上是关于访问包含在数组中的指向类对象的类成员函数的正确语法是啥?的主要内容,如果未能解决你的问题,请参考以下文章