如何在循环中调用另一个函数内部的函数,同时通过函数传递数组?
How do you call a function inside of another functions for loop, while passing an array through the function?
我收到一条错误消息,指出我在另一个函数 (inputData) 的 for 循环内调用的函数 (validateData) 没有匹配的函数,即使我已经声明了函数并有函数的定义。
找了校内导师,让他们帮我调函数的参数,现在参数固定了,调用的时候函数不调用,报错。
//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);
在main函数内部,调用了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
}
错误信息是"error: no matching function for call to 'validateData(std::__cxx11::string [3][9], int [3][2], double [3][3][6], int&')"
该错误也发生在其他 validateData 函数调用
validdateData 函数需要字符串、整数、....
你应该这样声明
void validateData(string param1, int param2, double param3, int i);
你的函数不需要知道你的变量看起来像什么。
你声明了你的数组,
string nonNumeric1[STUDENTS][NONNUMERIC_INFO];
但是你试图调用
nonNumeric1[STUDENTS][NONNUMERIC_INFO]
其实是非法访问。该内存不是您分配的数组。
自变量与参数不匹配。
你声明
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(nonNumeric1, numeric1, numeric2, i, j); //error here
预期参数的维度为 "NUMERIC_INFO" 但您传入的数组大小为 "NONNUMERIC_INFO"
我收到一条错误消息,指出我在另一个函数 (inputData) 的 for 循环内调用的函数 (validateData) 没有匹配的函数,即使我已经声明了函数并有函数的定义。
找了校内导师,让他们帮我调函数的参数,现在参数固定了,调用的时候函数不调用,报错。
//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);
在main函数内部,调用了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
}
错误信息是"error: no matching function for call to 'validateData(std::__cxx11::string [3][9], int [3][2], double [3][3][6], int&')" 该错误也发生在其他 validateData 函数调用
validdateData 函数需要字符串、整数、....
你应该这样声明
void validateData(string param1, int param2, double param3, int i);
你的函数不需要知道你的变量看起来像什么。
你声明了你的数组,
string nonNumeric1[STUDENTS][NONNUMERIC_INFO];
但是你试图调用
nonNumeric1[STUDENTS][NONNUMERIC_INFO]
其实是非法访问。该内存不是您分配的数组。
自变量与参数不匹配。
你声明
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(nonNumeric1, numeric1, numeric2, i, j); //error here
预期参数的维度为 "NUMERIC_INFO" 但您传入的数组大小为 "NONNUMERIC_INFO"