Как исправить & quot; Ошибка LNK2019: неразрешенный внешний символ … & quot;

Я пытался сделать калькулятор для промежуточных и итоговых оценок 5 учеников. 40% среднесрочных и 60% финалов в массиве [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];
}

0

Решение

Я предлагаю вам пройти курс обучения, чтобы освежить в памяти основы вашего массива. http://www.cplusplus.com/doc/tutorial/arrays/

Ваш синтаксис для вызова функций неверен. Кроме того, ваши прототипы функций не совпадают.

float data(float x);

а также

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

Также при вызове функции не указывайте размеры.

float someFloat = data( a );
1

Другие решения

Вы объявили две функции

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

… и использовал их float аргумент тоже (иначе компилятор жаловался бы). Однако затем вы определили их с совершенно другой подписью:

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

Объявления имеют совершенно разные типы. В то время как функции, которые вы объявили, берут один float в качестве аргумента определенные вами функции принимают в качестве аргумента указатель на массив чисел с плавающей точкой. Точнее, определяемые вами функции берут указатель на массив из 3 floats аргументация, поскольку они эквивалентны этой декларации:

float data(float (*x)[3]);
float calc(float (*y)[3]);
0

Также исправьте эти звонки:

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

Потому что вы ссылаетесь на несуществующий элемент в матрице a, Либо вы передадите неопределенное значение, либо вы получите ошибку.

Помните, что последний элемент вашего aматрица a[4][2], Если вы намеревались передать всю матрицу в вашу функцию, а не один элемент, вы должны переопределить свои прототипы и использовать только имя матрицы a в качестве аргумента.

«Неопределенный символ», на который ссылается компоновщик, — это ваши функции data, calc а также HL, Три из них используются в вашем main() функционировать как функции, которые ожидают одно значение с плавающей точкой для работы. Как и твои прототипы.

Но ваша реализация использует матрицы в качестве аргументов, а не с плавающей точкой. Компилятор C должен жаловаться на неверный аргумент типа, используемый в функциях data, calc а также HL, но компилятор C ++ будет интерпретировать его как data, calc а также HL перегруженные функции, поэтому они могут иметь более одной реализации. Вы предоставляете один из них (с матрицей в качестве аргумента), но компилятору нужен другой (с плавающей точкой в ​​качестве аргумента). Компоновщик отвечает за поиск всех используемых реализаций перегруженной функции. Поскольку он не может их найти, он выдает эту ошибку.

0
По вопросам рекламы [email protected]