c++ - todas - tipos de funciones en lenguaje c
¿Cómo devolver una estructura desde una función en C++? (4)
Como señalaron otros, defina studentType fuera de la función. Una cosa más, incluso si lo hace, no cree una instancia studentType local dentro de la función. La instancia está en la pila de funciones y no estará disponible cuando intentes devolverla. Sin embargo, una cosa que puede hacer es crear studentType dinámicamente y devolver el puntero fuera de la función.
Probé en algunos foros diferentes y parece que no puedo obtener una respuesta directa, ¿cómo puedo hacer que esta función devuelva la estructura? Si intento ''devolver newStudent;'' Aparece el error ''No existe una conversión adecuada definida por el usuario de studentType a studentType exists''.
// Input function
studentType newStudent()
{
struct studentType
{
string studentID;
string firstName;
string lastName;
string subjectName;
string courseGrade;
int arrayMarks[4];
double avgMarks;
} newStudent;
cout << "/nPlease enter student information:/n";
cout << "/nFirst Name: ";
cin >> newStudent.firstName;
cout << "/nLast Name: ";
cin >> newStudent.lastName;
cout << "/nStudent ID: ";
cin >> newStudent.studentID;
cout << "/nSubject Name: ";
cin >> newStudent.subjectName;
for (int i = 0; i < NO_OF_TEST; i++)
{ cout << "/nTest " << i+1 << " mark: ";
cin >> newStudent.arrayMarks[i];
}
newStudent.avgMarks = calculate_avg(newStudent.arrayMarks,NO_OF_TEST );
newStudent.courseGrade = calculate_grade (newStudent.avgMarks);
}
Usted tiene un problema de alcance Defina la estructura antes de la función, no dentro de ella.
studentType newStudent() // studentType doesn''t exist here
{
struct studentType // it only exists within the function
{
string studentID;
string firstName;
string lastName;
string subjectName;
string courseGrade;
int arrayMarks[4];
double avgMarks;
} newStudent;
...
Moverlo fuera de la función:
struct studentType
{
string studentID;
string firstName;
string lastName;
string subjectName;
string courseGrade;
int arrayMarks[4];
double avgMarks;
};
studentType newStudent()
{
studentType newStudent
...
return newStudent;
}
Aquí hay una versión editada de su código que se basa en ISO C ++ y que funciona bien con G ++:
#include <string.h>
#include <iostream>
using namespace std;
#define NO_OF_TEST 1
struct studentType {
string studentID;
string firstName;
string lastName;
string subjectName;
string courseGrade;
int arrayMarks[4];
double avgMarks;
};
studentType input() {
studentType newStudent;
cout << "/nPlease enter student information:/n";
cout << "/nFirst Name: ";
cin >> newStudent.firstName;
cout << "/nLast Name: ";
cin >> newStudent.lastName;
cout << "/nStudent ID: ";
cin >> newStudent.studentID;
cout << "/nSubject Name: ";
cin >> newStudent.subjectName;
for (int i = 0; i < NO_OF_TEST; i++) {
cout << "/nTest " << i+1 << " mark: ";
cin >> newStudent.arrayMarks[i];
}
return newStudent;
}
int main() {
studentType s;
s = input();
cout <<"/n========"<< endl << "Collected the details of "
<< s.firstName << endl;
return 0;
}