访问数组中包含的指针到类对象的类成员函数的正确语法是什么?

时间:2016-11-12 15:02:21

标签: c++ arrays class pointers

我有以下函数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 ++指针语法的新手。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您问题的简短回答是:

    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然后立即分配一个新值。除了sumstd_sum(以及i)之外,您不需要任何非常量变量。
  • 使用std::accumulate
  • 代码会更好
  • 有更好的计算平均值和标准差的算法,它们在数值上更稳定。