it-swarm.com.de

Wie kann ich eine Struktur aus einer Funktion in C ++ zurückgeben?

Ich habe ein paar verschiedene Foren ausprobiert und kann anscheinend keine eindeutige Antwort erhalten. Wie kann ich diese Funktion veranlassen, die Struktur zurückzugeben? Wenn ich versuche, 'return newStudent;' Ich erhalte die Fehlermeldung "Keine geeignete benutzerdefinierte Konvertierung von studentType zu studentType vorhanden."

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

Hier ist eine bearbeitete Version Ihres Codes, die auf ISO C++ basiert und gut mit G ++ zusammenarbeitet:

#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

Sie haben ein Umfangsproblem. Definieren Sie die Struktur vor der Funktion, nicht innerhalb der Funktion.

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

Bewegen Sie es außerhalb der Funktion:

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

Definieren Sie studentType, wie von anderen erwähnt, außerhalb der Funktion. Eine weitere Sache, auch wenn Sie das tun, erstellen Sie keine lokale studentType-Instanz innerhalb der Funktion. Die Instanz befindet sich auf dem Funktionsstapel und ist nicht verfügbar, wenn Sie versuchen, sie zurückzugeben. Sie können studentType jedoch dynamisch erstellen und den Zeiger außerhalb der Funktion darauf zurückführen.

0
mkny