web-dev-qa-db-fra.com

Comment retourner une structure à partir d'une fonction en C ++?

J'ai essayé sur plusieurs forums différents et je n'arrive pas à obtenir une réponse claire, comment puis-je faire en sorte que cette fonction retourne la structure? Si j'essaye de 'retourner newStudent;' J'obtiens l'erreur "Il n'existe aucune conversion définie par l'utilisateur appropriée de studentType vers studentType".

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

}
25
tail_recursion

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;
}
34

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

13
Fred Larson
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éplacez-le en dehors 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;
}
7
Zac Howland

Comme souligné par d'autres, définissez studentType en dehors de la fonction. Encore une chose, même si vous le faites, ne créez pas d'instance locale studentType à l'intérieur de la fonction. L'instance se trouve sur la pile de fonctions et ne sera pas disponible lorsque vous essayez de la renvoyer. Cependant, vous pouvez créer dynamiquement studentType et lui renvoyer le pointeur en dehors de la fonction.

0
mkny