fstream in Unterfunktion

Gast #997997
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
}
Gast #998345
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
}
Gast #998358
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
Gast #998439
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.
Persönliche Seite #998725
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren