2

这是我教科书中计算分数的练习作业。它需要 7 分,并下降最高和最低。

我不认为有语法错误,但我得到一个未解决的外部符号错误。我寻找了类似的问题,似乎问题可能在于使用函数但没有定义它。我已经定义了我的所有函数,但可能在 main 或 calculatescore 中都不正确。我是 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;
}

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

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;
}
4

3 回答 3

5

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

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

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

与您的错误无关的一个问题是,在您的方法定义(calculateScore)中,您将maxScore其用作 的索引scores,而maxScore似乎只是最高分的值。因此,您可以scores[maxScore]简单地替换为maxScore. 这同样适用least- 它是一个值,而不是索引,因此您可以least使用scores[least].

于 2013-07-02T16:59:23.653 回答
2

此签名适用于您编写的函数:float calculateScore(float scores[], const int judges, float difficulty, int maxScore, int least)

这是你的原型:float calculateScore(float scores[], const int judges, float difficulty);

他们不匹配的是签名。

首先,您应该将原型更改为:

float calculateScore(float scores[], const int judges, float difficulty, int maxScore, int least);

正如已经指出的那样,您应该使用 5 个类型的变量调用您的函数:float [], const int, float, int,int而不是float [], const int,float

我认为这是你想要的主要内容:

int max = findMax(scores, judges);
int min = findLeast(scores, judges);
calculateScore (scores, judges, difficulty, max, min);
于 2013-07-02T17:03:23.420 回答
1

将 main 中的代码重写为以下内容:

  const int judges = 7;
  float scores [judges];
  float difficulty = 0;
  float finalscore;
   
  printHeader (judges);
  int leastTemp;
  int maxTemp;
  enterData (scores, judges, difficulty);  // get user input
  leastTemp = findLeast(scores, judges); // find lowest score 
  maxTemp = findMax(scores, judges); // find highest score
  finalscore = calculateScore (scores, judges, difficulty, maxTemp, leastTemp); // get final score
  cout << "The final score is " << finalscore << '\n';

  return 0;

这样,您就可以将两个缺失的参数放入函数 calculateScore。

于 2013-07-02T17:07:07.600 回答