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

Я получаю сообщение об ошибке, в котором говорится, что не существует соответствующей функции для вызова моей функции (validateData), которую я вызываю внутри цикла for другой функции (inputData), даже если я объявил функцию и есть определение для функции.

Я обратился к репетитору в кампусе, чтобы они помогли мне с параметрами функции, и теперь, когда параметры зафиксированы, функция не вызывает, когда я вызываю ее, что выдает мне сообщение об ошибке.

//Declare 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;

//Declare function prototypes
void inputData();

void validateData(string nonNumeric1[STUDENTS][NUMERIC_INFO], int numeric1[STUDENTS][NUMERIC_INFO], double numeric2[STUDENTS][COURSES][TESTS_and_CNG], int i);

void validateData(string nonNumeric1[STUDENTS][NUMERIC_INFO], int numeric1[STUDENTS][NUMERIC_INFO], double numeric2[STUDENTS][COURSES][TESTS_and_CNG], int i, int j);

void validateData(string nonNumeric1[][NUMERIC_INFO], int numeric1[STUDENTS][NUMERIC_INFO], double numeric2[STUDENTS][COURSES][TESTS_and_CNG], int i, int j, int k);

внутри основной функции, она вызывает функцию inputData

//Declaring arrays (inside inputData function definition 
string nonNumeric1[STUDENTS][NONNUMERIC_INFO];
int numeric1[STUDENTS][NUMERIC_INFO];
double numeric2[STUDENTS][COURSES][TESTS_and_CNG];
   //Outer loop on students
    for(int i = 0; i < 3; i++)
    {
        getline(fin, nonNumeric1[i][1]); //Name
        getline(fin, nonNumeric1[i][2]); //ID
        fin >> numeric1[i][0]; // Age
        fin.ignore();
        getline(fin, nonNumeric1[i][3]); //Address
        fin >> numeric1[i][1]; //Years
        fin.ignore();
        getline(fin, nonNumeric1[i][4]); //Phone
        getline(fin, nonNumeric1[i][5]); //SSN
        validateData(nonNumeric1, numeric1, numeric2, i); //error message here

        //Middle loop on course
        for(int j = 6; j < 9; j++)
        {
            getline(fin, nonNumeric1[i][j]); //Course
            validateData(nonNumeric1, numeric1, numeric2, i, j); //error here

            //Inner loop on tests
            for(int k = 0; k < 5; k++)
            {
                fin >> numeric2[i][j][k]; //Grade
                fin.ignore();
                validateData(nonNumeric1, numeric1, numeric2, i, j, k); //error here too
                numGrade(nonNumeric1, numeric1, numeric2, i, j , k);
                letGrade(numeric2, i, j , k);
                comments(numeric2, i, j, k);
                report(nonNumeric1, numeric1, numeric2, int i, int j, int k);
            }
//Function definition
void validateData(string nonNumeric1[][NONNUMERIC_INFO], int numeric1[][NUMERIC_INFO], double numeric2[][COURSES][TESTS_and_CNG], int i)
{
    //if statements to validate all data that only uses the i variable 
}
void validateData(string nonNumeric1[][NONNUMERIC_INFO], int numeric1[][NUMERIC_INFO], double numeric2[][COURSES][TESTS_and_CNG], int i, int j)
{
    //if statements to validate all data that only uses the i and j variables 
}
void validateData(string nonNumeric1[][NONNUMERIC_INFO], int numeric1[][NUMERIC_INFO], double numeric2[][COURSES][TESTS_and_CNG], int i, int j, int k)
{
    //if statements to validate all data that only uses the i,j and k variables 
}

сообщение об ошибке: «ошибка: нет соответствующей функции для вызова« validateData »(std :: __ cxx11 :: string [3] [9], int [3] [2], double [3] [3] [6] ], int & ') " ошибка также происходит при вызове других функций validateData

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Существует несоответствие между аргументами и параметрами.

вы заявляете

string nonNumeric1[STUDENTS][NONNUMERIC_INFO];

void validateData(string nonNumeric1[STUDENTS][NUMERIC_INFO], int numeric1[STUDENTS][NUMERIC_INFO], double numeric2[STUDENTS][COURSES][TESTS_and_CNG], int i);

но звоните

validateData (не числовой1, числовой1, числовой2, i, j); // ошибка здесь

ожидаемый параметр имеет размерность "NUMERIC_INFO", но вы передаете массив размером "NONNUMERIC_INFO"

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

validdateData func нужна строка, int, ....

Вы должны заявить, как это

void validateData(string param1, int param2, double param3, int i);

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

И вы объявили свой массив,

string nonNumeric1[STUDENTS][NONNUMERIC_INFO];

Но вы пытались позвонить

nonNumeric1[STUDENTS][NONNUMERIC_INFO]

На самом деле, это незаконный доступ. Эта память не является вашим назначенным массивом.

...