Forum: PC-Programmierung fstream in Unterfunktion


von luftpumpe (Gast)


Lesenswert?

Gude

Folgendes C++ Programm soll später mal Daten in eine Datei schreiben.
Der Header der Datei soll mit der Funktion write_header() geschrieben 
werden.
Die Funktion ist zur besseren Übersicht in eine eigene Datei ausgelagert 
(writer.h sowie writer.cpp).
[Da liegt auch das Problem]

Der Aufruf fwrite<<"<html>"<<endl; in der Funktion write_header() 
funktioniert aber leider nicht und bricht mit folgender Meldung ab:

invalid operands of types `size_t ()(const void*, size_t, size_t, 
FILE*)' and `const char[11]' to binary `operator<<'

Wie bekomme ich mein Programm dazu, dass es auch aus der Unterfunktion 
heraus den Schreibbefehl
(fwrite<<"<html>"<<endl;) durchführen kann?

1
//main.cpp
2
#include <cstdlib>
3
#include <iostream>
4
#include <fstream>
5
#include "writer.h"
6
using namespace std;
7
8
int main(int argc, char *argv[])
9
{
10
 fstream fwrite;
11
 fwrite.open("output.dat",ios::trunc | ios::out);
12
13
 write_header();    //fehler
14
15
 fwrite.close();
16
 system("PAUSE");
17
 return EXIT_SUCCESS;
18
}
19
20
21
//writer.h
22
23
#ifndef writer_h
24
#define writer_h
25
#include <cstdlib>
26
#include <iostream>
27
#include <fstream>
28
using namespace std;
29
30
void write_header(void);
31
32
#endif
33
34
35
//writer.cpp
36
37
#include <cstdlib>
38
#include <iostream>
39
#include <fstream>
40
#include "writer.h"
41
using namespace std;
42
43
void write_header(void)
44
{
45
  fwrite<<"<html>"<<endl;  //fehler: 
46
}

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

Woher soll write_header() fwrite kennen? Übergib das mal als Parameter 
(z.B per fstream& fwrite)

von P. S. (Gast)


Lesenswert?

Vor allem nenne es nicht fwrite, das kollidiert mit einer (uebrigens 
sehr praktischen) Funktion in stdio.h.

von luftpumpe (Gast)


Lesenswert?

Vielen Danke erstmal für die Hilfe, wegen der Kollision mit stdio.h habe 
ich fstream nun durch streamwriter ersetzt. Soweit so gut.

Leider bekomme ich die Parameterübergabe nicht hin. Ich verstehe nicht, 
wie ich mittels des übergebenen Parameters in der Unterfunktion auf den 
streamwriter zurückgreifen kann.
1
//main.cpp
2
#include <cstdlib>
3
#include <iostream>
4
#include <fstream>
5
#include "writer.h"
6
using namespace std;
7
8
int main(int argc, char *argv[])
9
{
10
 fstream streamwriter;
11
 streamwriter.open("output.dat",ios::trunc | ios::out); 
12
 
13
 write_header(streamwriter&);
14
 
15
 streamwriter.close();
16
 system("PAUSE");
17
 return EXIT_SUCCESS;
18
}
19
20
//writer.h
21
#ifndef writer_h
22
#define writer_h
23
#include <cstdlib>
24
#include <iostream>
25
#include <fstream>
26
using namespace std;
27
28
void write_header(streamwriter&);
29
30
#endif
31
32
//writer.cpp
33
#include <cstdlib>
34
#include <iostream>
35
#include <fstream>
36
#include "writer.h"
37
38
using namespace std;
39
40
void write_header(streamwriter& bla)
41
{
42
   
43
   bla<<"<html>";
44
}

von Peter (Gast)


Lesenswert?

Hallo,
warum fangen alle erstmal an die hässlischen streamfunktionen zu nutzten 
und denken damit sie Programmieren c++ (Objektorientiert)!

Eventuell erstmal die Grundlagen erarbeiten!

eine Klasse erstellen in einer eigenen Datei und dann einfach
objekt.writeheader(...)
machen. Dabei wird man bestimmt feststellen das es keinen Sinn macht die 
writeheader einzeln in eine extra Datei zu packen. Es macht nur Sinn das 
Komplette Handling (write_header wird ja wohl nur der anfang sein) 
auszulagern.

mfg
Peter

von P. S. (Gast)


Lesenswert?

luftpumpe wrote:

...
>  write_header(streamwriter&);

...

Falsch. Das muss

write_header(streamwriter);

Wie waer's sich Grundlagen mal zu erarbeiten, statt einfach Beispiele 
unverstanden abzutippen? Was eine Referenz ist, ist bei C/C++ 
Grundlagenwissen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

1
//main.cpp
2
#include <cstdlib>
3
#include <iostream>
4
#include <fstream>
5
#include "writer.h"
6
using namespace std;
7
8
int main(int argc, char *argv[])
9
{
10
 fstream streamwriter;
11
 streamwriter.open("output.dat",ios::trunc | ios::out); 
12
 
13
 write_header(streamwriter);
14
 
15
 streamwriter.close();
16
 system("PAUSE");
17
 return EXIT_SUCCESS;
18
}
19
20
//writer.h
21
#ifndef writer_h
22
#define writer_h
23
using namespace std;
24
25
void write_header(fstream&);
26
27
#endif
28
29
30
//writer.cpp
31
#include <cstdlib>
32
#include <iostream>
33
#include <fstream>
34
#include "writer.h"
35
36
using namespace std;
37
38
void write_header(fstream& bla)
39
{
40
   bla<<"<html>";
41
}

Der Unterschied zwischen Datentypen und instanziierten Objekten 
(vulgo Variablen) sollte einem schon geläufig sein.

von luftpumpe (Gast)


Lesenswert?

Vielen Dank, die Funktion läuft jetzt. Mit der Thematik muss sich mich 
jedoch noch mal beschäftigen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.