Как именно вы передаете массивы через параметры функции? - PullRequest
2 голосов
/ 15 апреля 2019

У меня есть проект для моего класса, который в основном читает информацию о 3 студентах (у каждого студента есть 3 курса и 5 тестов, а также информацию, такую ​​как их имя, ssn, номер телефона и т. Д.) Из входного файла, сохраняет входные данныев массивах, затем выводит информацию в выходной файл.Проект должен быть разделен на 6 функций, не включая основную функцию.

Я могу успешно прочитать и сохранить информацию, но когда я перехожу к функции validateData, мой массив не передается вфункция, поэтому он не сможет ее проверить.Эта ошибка также происходит во всех других функциях.Я полагаю, что это, вероятно, ошибка с прототипами функций, так как это то, что меня больше всего смущает.

Я попытался изменить параметры прототипа на (string [], int [], double []) потому что у меня есть 3 разных массива, один для строк, один для целых и один для двойных.Но это не сработало.Я также попробовал то же самое, за исключением того, что без этих «[]», все еще не работал, я думаю, что ошибка говорит о том, что компилятор не смог преобразовать double * в double или наоборот.

//Declaring global constants
const int STUDENTS = 3;
const int NONNUMERIC_INFO = 9;
const int NUMERIC_INFO = 2;
const int COURSES = 3;
const int TESTS_and_CNG = 6;
//Above main function, Function prototype
void validateData(string [], int [], double []);
//Inside main function, Function call
    validateData();
//Declaring Arrays (inside of a different function called inputData)
string nonNumeric1[STUDENTS][NONNUMERIC_INFO];
int numeric1[STUDENTS][NUMERIC_INFO];
double numeric2[STUDENTS][COURSES][TESTS_and_CNG];
//Under main function, Function definition
void validateData(string, int, double)
{
 //A bunch of if statements that i will soon turn into for loops, but will save you guys the trouble of reading them all, as its not important to the question.
}

Я ожидаю, что массивы будут переданы в функцию, однако это не происходит, и я получаю сообщение об ошибке "error: слишком мало аргументов для функции" void validateData (std :: __ cxx11 :: string *, int *, double *) '"Я не знаю, что пытается сказать сообщение об ошибке.

1 Ответ

0 голосов
/ 15 апреля 2019

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

Ваш прототип :

//Above main function, Function prototype
void validateData(string [], int [], double []);

Ваша функция :

void validateData(string, int, double)

Во-вторых, хотя вашему прототипу могут не понадобиться имена переменных, строка заголовка вашей функции, безусловно, нужна.

void validateData(string, int, double) ваша функция имеет только типы переменных. Я бы проверил учебник, например объявление функций , если вы не совсем знакомы с объявлением функций.

Наконец, после того, как вы сопоставили строку заголовка прототипа функции и строку заголовка фактической функции и дали имена переменных переменных фактических параметров функции, вам нужно будет исправить вызов функции.

Вы вызываете свою функцию так: validateData(); Это снова не соответствует строке заголовка вашей функции. В заголовке вашей функции написано, что validateData занимает string array, int и double. Ваш вызов функции ничего не передает (). Если вы хотите, чтобы ваши array, int и double появлялись в функции, вам нужно передать их в вызов функции. validateData(some_array, some_int, some_double).

Не забудьте заменить some_array, some_int ... и т. Д. Фактическими переменными с соответствующими типами.

Edit:

Если вы хотите вызвать validateData метод внутри inputData, вам нужно сделать что-то вроде:

void inputeData(....) {

 validateData(some_array, some_int, some_double);
}

...