Richtige Syntax benötigt!

M

matzeed7

Mitglied
Hallo,

ich habe mal eine Frage! ich möchte in meinem
Hauptprogram eine Funktion aufrufen und dieser als Argument
eine Datei übergeben. Die aufgerufene Funktion soll dann
was in die geöffnete datei schreiben.

hier mal der Funktionaufruf aus der main()
Code:
int main() {
  fstream datei;
  	// Textdatei zum schreiben öffnen.
  		datei.open("Ausgabe.txt", ios::out);

   writeinfile(&datei, "noch a test");
	
	
  datei.close();

	return 0;
}

nun zu meinem Problem, meine Funktion
Code:
void writeinfile(fstream  *file, string text){
	*file<<text<<endl;		
}

funktioniert, nun möchte ich aber auch die membermethoden der datei
benutzen also zB
Code:
bool test=datei.bad();

nun meine Frage:
wie kann ich die Zeile bool test=datei.bad(); aus den Hauptprogramm
in die funktion writeinfile(..) einbringen?
ich hatte schon

Code:
bool test=*file->bad();
probiert aber es kommt die fehlermeldung

error: invalid type argument of `unary *'


Danke schon mal an Euch!
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

PS:

ich habe jetzt mal
void writeinfile(fstream *file, string text){

if(file->bad()){cout<<"fehler"<<endl;}
*file<<text<<endl;

}

getestet und der compiler bringt keinen Fehler,
kann mir wer erklären warum ich mal * schreiben muss und mal nicht.

ich dachte immer das wenn man * file schreibt einen pointer hat
und wenn ich die funktion aufrufe muss ich den pointer *file die adresse
also &datei übergeben so das er nun file auf meine datei zeigt
 
Zuletzt bearbeitet:
kann mir wer erklären warum ich mal * schreiben muss und mal nicht.

Grundsätzlich muss man immer den Dereferenzierungsoperator (*) verwenden, wenn man auf das Objekt zugreifen will auf das der Zeiger verweist.

Wenn man nun Funktionen oder Variablen eines Objekts, bzw. einer Klasse erreichen möchte, verwendet man den Punktoperator (.). Das funktioniert auch bei Zeigern. Beispiel:
Code:
(*ptr).var
Da das recht umständlich und schlecht zu lesen ist, wurde der Pfeiloperator (->) eingeführt. Wird diese Schreibweise verwendet, lässt man das Sternchen (*) weg, da der Pfeiloperator automatisch dereferenziert. Beispiel:
Code:
ptr->var

Ich hoffe ich habe es einigermaßen verständlich erklärt!?

Bei deinem Beispiel fehlen dir also die Klammern und du müsstest den Punktoperator verwenden:
Code:
bool test=[COLOR="Red"]([/COLOR]*file[COLOR="Red"]).[/COLOR]bad();
Alternativ kannst du auch den Pfeiloperator einsetzen:
Code:
bool test=file[COLOR="Red"]->[/COLOR]bad();

Gruß,
Philip
 
Zuletzt bearbeitet:
ahhhh

habe verstanden!

ich danke dir!!!!!!!

gruss matze
 
Code:
void schreiben(FILE *f,char *s) {
   f = fopen(f,"r+"); // Oder "w+"
   if(NULL==F) {
      perror("ERROR: Fehler beim öffnen der Datei ");
      return EXIT_FAILURE;
   }
   fputs(s,f); // Schreibt deinen String in die Datei!
   fclose(f);
}
-----------
Aber das ist C und du will C++ oder?

GreeZ Yellow
 

Ähnliche Themen

String auf Konsole ausgeben

Funktion nicht gefunden

wxPython Problem

kernel Programmierung sys_creat

NagiosGrapher 1.7.1 funktioniert nicht

Zurück
Oben