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);

}
15
demandé sur HolyBlackCat 2013-10-06 07:11:23

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;
}
25
répondu Nandakumar Edamana 2016-04-01 12:39:03

vous avez un problème de portée. Définissez la structure avant la fonction, pas à l'intérieur.

12
répondu Fred Larson 2013-10-06 03:13:17
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;
}
4
répondu Zac Howland 2013-10-06 03:15:13

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.

0
répondu mkny 2013-10-06 03:39:29