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.