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

1

17.08.2011, 22:34

Probleme mit std::ofstream

Guten Nabend.

Wie die Überschrifft schon sagt habe ich ein Problem mit ofstream.
Ich kann mir nicht erklären wie der fehler zu stande kommt.
Am besten ich Zeige mal den Code.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
void CMap::Save_Map(const char* FilePath)
{
    std::ofstream File;
    // To Save the Parts of a Tile
    unsigned int Save1 = 0;
    unsigned int Save2 = 0;
    unsigned int Save3 = 0;
    unsigned int Save4 = 0;
    unsigned int Save5 = 0;
    bool Save6 = false;
    bool Save7 = false;
    bool Save8 = false;
    char Save9 = '0';
    void* Save10 = 0;
    File.open(FilePath, std::ios::out | std::ios::binary);
    File.write((char*)&Length_X, sizeof(Length_X));
    File.write((char*)&Length_Y, sizeof(Length_Y));
    File.write((char*)&TileSetID,sizeof(TileSetID));
    File.write((char*)&GlobalLight,sizeof(GlobalLight));
    for (unsigned int i = 0;i<Length_X;i++)
    {
        for (unsigned int j = 0; j<Length_Y;j++)
        {
            //
            Save1 = TileArray[i][j].Get_Coord_X();
            Save2 = TileArray[i][j].Get_Coord_Y();
            Save3 = TileArray[i][j].Get_ID_Layer_Ground();
            Save4 = TileArray[i][j].Get_ID_Layer_Wall();
            Save5 = TileArray[i][j].Get_ID_Layer_Deco();
            Save6 = TileArray[i][j].Get_LOS_Blocked();
            Save7 = TileArray[i][j].Get_Tile_Known();
            Save8 = TileArray[i][j].Get_Walkable();
            //
            File.write((char*)&Save1,sizeof(unsigned int));
            File.write((char*)&Save2,sizeof(unsigned int));
            File.write((char*)&Save3,sizeof(unsigned int));
            File.write((char*)&Save4,sizeof(unsigned int));
            File.write((char*)&Save5,sizeof(unsigned int));
            File.write((char*)&Save6,sizeof(bool));
            File.write((char*)&Save7,sizeof(bool));
            File.write((char*)&Save8,sizeof(bool));
        }
    }
    for (unsigned int i = 0;i<Length_X;i++)
    {
        for (unsigned int j = 0; j<Length_Y;j++)
        {
            Save1 = TileArray[i][j].Get_ID_Number().Coordinaten.X;
            Save2 = TileArray[i][j].Get_ID_Number().Coordinaten.Y;
            Save3 = TileArray[i][j].Get_ID_Number().ID_Nummer;
            Save9 = TileArray[i][j].Get_ID_Number().ID_Letter;
            //
            File.write((char*)&Save1,sizeof(unsigned int));
            File.write((char*)&Save2,sizeof(unsigned int));
            File.write((char*)&Save3,sizeof(unsigned int));
            File.write((char*)&Save9,sizeof(char));
            // Object Save
            switch(Save9)
            {
                CCreature* Temp_CCreature;
                Temp_CCreature->Save_Creature(File);
                // Save the NPC
                case 'N':
                    //Temp_CCreature = TileArray[i][j].Get_ID_Number().ptr_Object.ptr_Creature;
                    //Temp_CCreature->Save_Creature(File);  
                break;
                // Save the Monster
                case 'E':
                    
                break;
                // Save the ITem
                case 'I':
                    
                break;
                // Nothing to Save
                default:

                break;
            };
        }
    }
    File.close();
}

das ist die Funktion die das Speichern meiner TileMap übernimmt


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
bool CCreature::Save_Creature(std::ofstream File)
{
    unsigned short Save1 = 0; // AttributeLevel;
    unsigned short Save2 = 0; // temp_AttributeLevel;
    unsigned int Save3 = 0; // TotalXP;
    unsigned int Save4 = 0; // XP_Next_Level;
    std::string Save5 = ""; // AttributeName;
    bool Save6 = false; // Spells
    float Save7 = 0.0f; // Attackspeed
    Save7 = Attackspeed;
    Save3 = TotalXP;
    Save4 = UnusedXP;   
    Save3 = Lightradius;
    // Attribute first
    en_Attribute Attri_Temp;
    for(int i = 0;i < static_cast<int> (CreatureEnums::ATTRI_COUNTER);i++)
    {
        Attri_Temp = static_cast<CreatureEnums::en_Attribute>(i);
        //
        Save1 = Get_Attribute(Attri_Temp).Get_AttributeLevel();
        Save2 = Get_Attribute(Attri_Temp).Get_Temp_AttributeLevel();
        Save3 = Get_Attribute(Attri_Temp).Get_TotalXP();
        Save4 = Get_Attribute(Attri_Temp).Get_XP_Next_Level();
        Save5 = Get_Attribute(Attri_Temp).Get_AttributeName();
        //
        File.write((char*)&Save1,sizeof(unsigned short));
        File.write((char*)&Save2,sizeof(unsigned short));
        File.write((char*)&Save3,sizeof(unsigned int));
        File.write((char*)&Save4,sizeof(unsigned int));
        File.write((char*)&Save5,sizeof(Save5.size()));
    }
    // Now Skills
    en_Skill Skill_Temp;
    for(int i = 0;i < static_cast<int> (CreatureEnums::SKILL_COUNTER);i++)
    {
        Skill_Temp = static_cast<CreatureEnums::en_Skill>(i);
        //
        Save1 = Get_Skill(Skill_Temp).Get_SkillLevel();
        Save2 = Get_Skill(Skill_Temp).Get_Temp_SkillLevel();
        Save3 = Get_Skill(Skill_Temp).Get_TotalXP();
        Save4 = Get_Skill(Skill_Temp).Get_XP_Next_Level();
        Save5 = Get_Skill(Skill_Temp).Get_SkillName();
        //
        File.write((char*)&Save1,sizeof(unsigned short));
        File.write((char*)&Save2,sizeof(unsigned short));
        File.write((char*)&Save3,sizeof(unsigned int));
        File.write((char*)&Save4,sizeof(unsigned int));
        File.write((char*)&Save5,sizeof(Save5.size()));
    }
    // Spells
    en_Spell Spell_Temp;
    for(int i = 0;i < static_cast<int> (CreatureEnums::SPL_COUNTER);i++)
    {
        Spell_Temp = static_cast<en_Spell>(i);
        Save6 = Get_Spell(Spell_Temp);
        File.write((char*)&Save6,sizeof(bool));
    }
    // the Rest
    Save3 = TotalXP;
    Save4 = UnusedXP;
    Save7 = Attackspeed;
    File.write((char*)&Save3,sizeof(unsigned int));
    File.write((char*)&Save4,sizeof(unsigned int));
    File.write((char*)&Save7,sizeof(float));
    Save3 = Lightradius;
    File.write((char*)&Save3,sizeof(unsigned int));
    return true;
}

Diese Funktion Wird in der Obigen Aufgerufen und soll Objekte und NPC Speichern.

Die eigentliche Fehlermeldung sieht so aus.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
d:\programme\microsoft visual studio 9.0\vc\include\fstream(803) : error C2248: "std::basic_ios<_Elem,_Traits>::basic_ios": Kein Zugriff auf private Member, dessen Deklaration in der std::basic_ios<_Elem,_Traits>-Klasse erfolgte.
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        d:\programme\microsoft visual studio 9.0\vc\include\ios(151): Siehe Deklaration von 'std::basic_ios<_Elem,_Traits>::basic_ios'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        Diese Diagnose trat in der vom Compiler generierten Funktion "std::basic_ofstream<_Elem,_Traits>::basic_ofstream(const std::basic_ofstream<_Elem,_Traits> &)" auf.
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
Code wird generiert...

Mit einem Doppelclick auf die Fehlermeldung komme ich indie datei fstream.

Schuld muß irgendwie

C-/C++-Quelltext

1
Temp_CCreature->Save_Creature(File);
sein da der fehler nur auftritt wenn die Zeile da ist.

Die Fehlerbeschreibung auf MSDN hilft mir auch nicht wirklich weiter.

Hat jemand ne idee was da schief läuft ?
Danke schon mal im vor raus.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

17.08.2011, 22:41

Da es blödsinnig wäre einen Stream zu kopieren ist der Kopierkonstruktor privat. Du kannst ihn also nicht per call by value übergeben. Mal ganz davon abgesehen, dass man so gut wie alle zusammengesetzen Typen fast immer als Referenz oder Zeiger übergeben sollte.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

3

18.08.2011, 06:39

Danke für die schnell Antwort. Funktioniert jetzt einwandfrei.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werbeanzeige