Funktionsrückagabe bei Fehler
-
Hallo,
was soll bitte folgende Funktion bei Fehler statt Struktur zurückgeben?
Danke und Gruß
BahanfarMy_Struct GetData(FILE *file) { My_Struct myStruct; if(file == NULL) //return ; if(!(fread(&myStruct,sizeof(My_Struct),1,file))) //return; ..... return myStruct; }
-
wenn Du Fehlercodes zurückgeben willst würde ich das anders machen. Übergib die Struktur als call by reference.
bool GetData(FILE *file, My_Struct *myStruct) { if(file == NULL) return false; if(!(fread(myStruct, sizeof(My_Struct),1,file))) return false; ..... return true; }
schirrmie
-
Du könntest in der struct eine Kennzeichnung für ungültig zurückgeben. Alternativ kannst du auch ein pair<bool,My_Struct> zurückgeben (oder die Daten als Parameter weiterreichen - siehe schirmie)
-
CStoll schrieb:
Du könntest in der struct eine Kennzeichnung für ungültig zurückgeben. Alternativ kannst du auch ein pair<bool,My_Struct> zurückgeben (oder die Daten als Parameter weiterreichen - siehe schirmie)
ich darf leider die vorhandenen Strukturen und Funktionen nicht ändern, sonst call by reference oder zusatzvariable eine Lösung.
wie kann ich pair<bool,My_Struct> zurückgaben?
Danke
-
Kommando zurück - wir sind ja hier in C und dort gibt es noch kein pair - müsstest du also selber nachbauen:
typedef struct { My_Struct data; bool state; } flagged_data; flagged_data GetData(FILE* file) { flagged_data retval; if(file==NULL || fread(&retval.data,sizeof(My_Struct),1,file)<1) retval.state = false; else retval.state = true; return retval; }
(erfordet allerdings auch, die Funktion zu ändern)
-
Tja wenn er die Funktion und die Struktur nicht ändern darf, dann geht wohl nur noch ne globale "Error" variable, die du dann in der Funktion setzt wenn was schief ging.
Darf man Fragen warum jemand eine Fehlerbehandlung will aber nicht will das die Funktion geändert wirdHätte er vorher ein wenig nachgedacht dann hättest du jetzt nicht den stress
schirrmie
-
Füll die Struktur doch mit irgendwelchem Unsinn auf
von dem du weißt, daß er unter normalen Umständen nie als Rückgabewert in Frage kommt (z.B. alle Felder mit -1 markieren etc.). Ich glaube CStoll hat schon sowas gemeint. Dann kannst du ja einfach eine Methode schreiben, die überprüft, ob eine Struktur gültig ist.
-
schirrmie schrieb:
Tja wenn er die Funktion und die Struktur nicht ändern darf, dann geht wohl nur noch ne globale "Error" variable, die du dann in der Funktion setzt wenn was schief ging.
Darf man Fragen warum jemand eine Fehlerbehandlung will aber nicht will das die Funktion geändert wirdHätte er vorher ein wenig nachgedacht dann hättest du jetzt nicht den stress
schirrmie
Hallo,
Grund: Der vorherige Entwickler (der jetzige Chef) will nicht akzeptieren, dass nahezu alle Funktionen bzw. Strukturen erweitert werden müssen, damit eine einfache Überprüfung möglich ist.
Danke euch allen
Bahanfar