C++简单计算数组得分

Mar*_*rla 2 c++ arrays function calculator

这是我的教科书中的练习作业,用于计算分数.它需要7分,并且最高和最低.

我不认为有语法错误,但我得到一个未解决的外部符号错误.我寻找类似的问题,似乎问题可能是使用函数而不是定义它.我已经定义了所有函数,但在main或calculatecore中可能都不正确.我是c ++的新手,非常感谢您解决这个问题.谢谢

这是我在VisualStudio上遇到的错误

错误LNK2019:函数_main中引用的未解析的外部符号"float __cdecl calculateScore(float*const,int,float)"(?calculateScore @@ YAMQAMHM @ Z)

#include <iostream>
using namespace std;

void printHeader(int judges);
void enterData (float scores[], int judges, float difficulty);
float calculateScore(float scores[], const int judges, float difficulty);
int findLeast(float scores[], const int judges);
int findMax(float scores[], const int judges);

int main () {
    const int judges = 7;
    float scores [judges];
    float difficulty = 0;
    float finalscore = calculateScore(scores, judges, difficulty);



printHeader (judges);
    enterData (scores, judges, difficulty);  // get user input
    findLeast(scores, judges); // find lowest score 
    findMax(scores, judges); // find highest score
    calculateScore (scores, judges, difficulty); // get final score
    cout << "The final score is " << finalscore << '\n';

    return 0;
}

void printHeader(const int judges) {
    cout << "This program calculates a divers score over" << judges << "judges"; 
}

void enterData(float scores[], const int judges, float difficulty) {
    for (int i = 0; i < judges; i++){
        cout <<"Enter score for judge " << i+1 << endl; 
        cin >> scores[i];
    }
    cout << "Enter difficulty: "<< endl;
    cin >> difficulty;
}
Run Code Online (Sandbox Code Playgroud)

这是我计算在main中调用的分数的函数.它应该是一个无效函数吗?

float calculateScore(float scores[], const int judges, float difficulty, int maxScore, int least) {
    float sum = 0;
        for (int i = 0; i < judges; i++) {
        sum += scores[i];
    }
    return sum - scores[least] - scores[maxScore] * difficulty * .6;
}


int findLeast(float scores[], const int judges) {
    int least = 0;
    for (int i = 1; i< judges; i++)
        if (scores[i] < scores[least])
            least = i;
    return least;
}

int findMax(float scores[], const int judges) {
    int maxScore = 0;
    for (int i = 1; i< judges; i++)
        if (scores[i] > scores[maxScore]) {
            maxScore = i; 
        }
    return  maxScore;
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*art 5

calculateScore使用float * const,int,floatmain函数调用args ,而实际方法的签名是float scores[], const int judges, float difficulty, int maxScore, int least.

总之,您在调用函数时缺少参数main().该方法需要一个数组scores[],一个整数judges,一个浮点数difficulty和一个int maxScore,以及一个int least,但你只给出了a float*(与a不同float[]),a int和另一个float.

因此,您没有提供正确的类型/数量的参数,并且编译器告诉您它无法找到具有这些参数类型的方法.

与您的错误无关的问题是,您使用的方法定义(calculateScore)maxScore作为索引scores,而maxScore看起来只是最大分数的值.因此您可以scores[maxScore]简单地替换maxScore.同样的least- 它是一个值,而不是一个索引,所以你可以使用least而不是scores[least].

  • @Yve不想和你争论!我编辑了我的答案,使其更清晰. (2认同)