Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

1

09.01.2008, 12:32

[Gelöst] std::ofstream und der gcc

Jaja, wie man merkt beschäftige ich mich grad vermehrt mit dem gcc und stolpere über verdammt viele Probleme. Diesmal folgender Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
    class Output
    {
    public:
        Output(void);
        ~Output(void);


    private:
        std::ofstream mLog;
    };

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
    Output::Output(void) : mLog("server.log", std::ios::out) // Zeile 22

    {

    }

    Output::~Output(void)
    {
        mLog.close();
    }
Habe ich in etwa so schon eigentlich immer unter Windows mit dem VS gehandhabt und nun ... wirft mir der gcc folgende Fehler um die Ohren:

C-/C++-Quelltext

1
2
3
4
5
6
src\Output.cpp: In copy constructor `std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)':
3.4.5/bits/ios_base.h:781: error: `std::ios_base::ios_base(const std::ios_base&)' is private
Output.cpp:22: error: within this context
WoRD - Server\src\Output.cpp: In copy constructor `std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)':
3.4.5/../../../../include/c++/3.4.5/streambuf:769: error: `std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]' is private
src\Output.cpp:22: error: within this context
Ich habe echt keine Ahnung, was ich irgendwie falsch gemacht haben könnte. Wenn ich allerdings std::ofstream mLog als Pointer deklariere und dann eben mit new erstelle und am Ende wieder lösche kompiliert mir das alles wunderbar. Aber das kann doch wohl nich die Lösung sein ...

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

09.01.2008, 13:28

Was steht denn an besagter Stelle (Zeile 22)?
@D13_Dreinig

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

09.01.2008, 14:17

das problem hatte ich auch mal. streams lassen sich nicht kopieren unter GCC (zumindest wenn du die libstdc++ vom gcc verwendest).
das is aber auch sinnvoll so, überleg dir einmal was es bedeutet einen stream zu kopieren!?

probier mal ob das was bringt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
  class Output
    {
    public:
        Output(void);
        ~Output(void);

    private:
        std::ofstream mLog;

        Output(const Output&);
        Output& operator =(const Output&);
    };

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

5

09.01.2008, 14:53

Stimmt, ist irgendwo durchaus sinnvoll. Und deine Lösung hats gebracht! Hier merkt man wieder mal sehr schön, dass mir die Tipps von Scott Meyer erst im Nachhinein einfallen, der hatte doch wiederholt auf die Fallen beim nichtdeklarieren eigener Kopierkonstruktoren hingewiesen ...

Werbeanzeige