0

我试着为 5 个学生的期中和期末成绩做一个计算器。40% 的期中考试和 60% 的期末考试在数组 a[5][3] 中。a[5][3] 因为 5 名学生,3 行因为 1 用于期中,另一用于期末,最后一道用于总成绩(期中的 40% + 期末的 60%)。我收到“错误 lnk2019”。该代码有什么问题?谢谢..

#include "stdafx.h"
#include <iostream>
using namespace std;

float a[5][3];
float data(float x);
float calc(float y);
float HL(float z);

int main()
{
    data(a[5][3]);
    calc(a[5][3]);
    HL(a[5][3]);

    system("pause");
    return 0;
}

float data(float x[5][3])
{
    for (int i = 0; i < 5; i++)//Getting the Grades
    {
        cout << "Enter midterm for St" << i + 1 << " : ";
        cin >> x[i][0];
        cout << "Enter final for St" << i + 1 << " : ";
        cin >> x[i][1];
    }
    return x[5][3];
} 

float calc(float y[5][3])
{
    for (int i = 0; i < 5; i++)//Calc. Overall Grades
    {
        y[i][2] = y[i][0] * 0,4 + y[i][1] * 0,6;
    }
    return y[5][3];
}

float HL(float z[5][3])
{
    float max = 0, min = 0;
    for (int i = 0; i < 5; i++)//Finding Highest and Lowest
    {
        if (z[i][2]>max)
        {
            max = z[i][2];
        }
        if (z[i][2] < min)
        {
            min = z[i][2];
        }
    }
    cout << "The Lowest Grade : " << min << "\nThe Highest Grade : " << max;
    return z[5][3];
}
4

3 回答 3

1

我建议您通过教程来复习您的阵列基础知识。http://www.cplusplus.com/doc/tutorial/arrays/

您调用函数的语法不正确。此外,您的函数原型不匹配。

float data(float x);

float data(float x[5][3])
{

另外,调用函数时,不要指定尺寸。

float someFloat = data( a );
于 2013-12-15T16:22:25.477 回答
0

此外,修复这些调用:

data(a[5][3]);
calc(a[5][3]);
HL(a[5][3]);

因为您正在引用 matrix 中不存在的元素a。要么你会传递一个未定义的值,要么你会得到一个段错误。

请记住,a矩阵的最后一个元素是a[4][2]。如果您的意图是将所有矩阵而不是单个元素传递给函数,则必须重新定义原型并仅使用矩阵名称a作为参数。

链接器所指的“未定义符号”是您的函数data和. 它们三个在您的函数中用作期望使用单个浮点值的函数。你的原型也是如此。calcHLmain()

但是您的实现使用矩阵作为参数,而不是浮点数。AC 编译器应该抱怨在函数data,calc和中使用了错误的类型参数HL,但 C++ 编译器会将其解释为data,calc并且HL是重载函数,因此它们可能有多个实现。您提供其中一个(以矩阵作为参数),但编译器需要另一个(以浮点数作为参数)。链接器负责查找重载函数的所有使用实现。由于找不到它们,因此会引发该错误。

于 2013-12-15T16:25:36.897 回答
0

你声明了两个函数

float data(float x);
float calc(float y);

...并使用它们作为float参数(否则编译器会抱怨)。但是,您随后使用完全不同的签名定义了它们:

float data(float x[5][3]) { ... }
float calc(float y[5][3]) { ... }

声明具有完全不同的类型。虽然您声明的函数将一个float作为参数,但您定义的函数将一个指向浮点数组的指针作为参数。更准确地说,您定义的函数将指向 3 s 数组的指针float作为参数,因为它们等效于此声明:

float data(float (*x)[3]);
float calc(float (*y)[3]);
于 2013-12-15T16:28:31.163 回答