Comment retourner une structure à partir d'une fonction en C++?
j'ai essayé sur quelques forums différents et ne semble pas obtenir une réponse claire, comment puis-je faire que cette fonction renvoie la structure? Si j'essaie 'retour newStudent;' j'obtiens l'erreur ' aucune conversion définie par l'utilisateur appropriée de studentType à studentType existe.'
// 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);
}
4 réponses
Voici une version éditée de votre code qui est basée sur ISO C++ et qui fonctionne bien avec 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;
}
vous avez un problème de portée. Définissez la structure avant la fonction, pas à l'intérieur.
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;
...
Déplacer à l'extérieur de la fonction:
struct studentType
{
string studentID;
string firstName;
string lastName;
string subjectName;
string courseGrade;
int arrayMarks[4];
double avgMarks;
};
studentType newStudent()
{
studentType newStudent
...
return newStudent;
}
comme l'ont souligné d'autres, définissez studentType en dehors de la fonction. Encore une chose, même si vous faites cela, ne créez pas une instance locale studentType à l'intérieur de la fonction. L'instance est sur la pile de fonction et ne sera pas disponible lorsque vous essayez de le retourner. Une chose que vous pouvez cependant faire est de créer studentType dynamiquement et de retourner le pointeur à elle en dehors de la fonction.