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

23.01.2007, 14:07

Lernprogramm

Hi

ich hab mich dazu entschieden mal etwas Französisch zu lernen^^.
Darum hab ich mir gedacht: "Schreib dir n Lernprogramm".

Da ist mir ein Visual C++ Debug Library Fehler untergekommen.
Jetzt hab ich eine Frage:

warum gibt es so einen Fehler wenn ich sowas mache:

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
class VerbManager
{
       public:
       unsigned long AddVerb (Verb *pVerb) {m_List.push_back(pVerb);}
       Destroy () {for (m_iterator=m_List.begin(); m_iterator != m_List.end(); ++i){delete (*m_iterator);}}

       Load () { // Aus Datei laden}

       Save() {// In Datei Speichern}


       ...
public:
      std::list<Verb*> m_List;
      std::list<Verb*>::iterator m_iterator;
}

int WINAPI WinMain (....)
{
     Verb *V = new Verb;
     VerbManager VM;
     VerbManager VM2;
     std::wstring S[25];

     for (unsigned int i=0; i < 25; ++i)
     {
    S[i] = L"Hi";
     }

     V->SetConjugations(S);

     VM.AddVerb (V);

     VM.Save ();

      if (VM2.Load ())
          return 1;

      MessageBox (NULL, VM2.GetVerb()->GetConjugation(1).c_str(), L"", MB_OK);

         VM.Destroy ();    // <------- Fehler nummer 1: hier kann der iterator nicht erhöht werden

    VM2.Destroy ();  // <--------- Fehler nummer 2: hier heißts BLOCK_TYPE_IS_VALID

}


PS: Im Release funktioniert alles wie es soll, ohne abstürze
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

23.01.2007, 14:13

Das ganze kompiliert ohne Probleme?
Weil das dürfte eigentlich garnicht gehen, denn:

for (m_iterator=m_List.begin(); m_iterator != m_List.end(); ++i)

Da ist ein dicker Fehle drinne.

P.S: warum ist hinter der Klasse kein Semikolon? weil eigentlich ist doch der Syntax class name {...};
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

3

23.01.2007, 15:38

ja das ist natürlich nicht der code aus meinem projekt^^

den hab ich kurz nochmal geschrieben.

Der erste Fehler ++i kommt warscheinlich weil ich sonst immer i als Zählvariable nehme.

Und hinter der Klasse hab ich halt ein Semikolon vergessen.
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

23.01.2007, 15:40

Du solltest aber durchaus den Code aus deinem Projekt posten. Ansonsten ist eine Fehlersuche, aufgrund mangelnder hellsehericher Fähigkeiten, sehr schwer!
@D13_Dreinig

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

23.01.2007, 15:49

dito. Also bitte den richtigen Code posten.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

6

23.01.2007, 16:22

Main:

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
/*******   I N C L U D E S   ************************************************/
#include "VerbManager.h"
#include "Verb.h"
#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine, int nShowCmd)
{
    Verb *V = new Verb;
    VerbManager VM;
    VerbManager VM2;
    std::wstring S[25];

    for (unsigned int i=0; i < 25; ++i)
    {
        S[i] = L"Hi";
    }

    V->SetConjugations(S);

    VM.AddRightVerb (V);

    VM.Save ();

    if (VM2.Load ())
        return 1;

    MessageBox (NULL, VM2.GetRightVerb()->GetConjugation(1).c_str(), L"", MB_OK);

                VM.Destroy ();
    VM2.Destroy ();

    return 0;
}


Verb

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
class Verb
{
public:

    // Setzt den Konjugationsstring

    unsigned long SetConjugations (std::wstring Conjugations[25]);

    // Liefert einen String aus dem Konjugatiuonsarray

    std::wstring GetConjugation (unsigned int Index){return m_Conjugations[Index];}

private:
    std::wstring m_Conjugations[25];
};

unsigned long Verb::SetConjugations(std::wstring Conjugations[25])
{
    for (unsigned int i=0; i < 25; ++i)
    {
        m_Conjugations[i] = Conjugations[i];
    }

    return 0x00000000;
}


VarbManager

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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
class Verb;

/*******   S T R U K T U R E N   ********************************************/
class VerbManager
{
public:

    unsigned long Load ();
    unsigned long Save ();

    Verb *GetRightVerb ();
    Verb *GetWrongVerb ();
    Verb *GetUndoneVerb ();

    unsigned long AddWrongVerb (Verb *WrongVerb);
    unsigned long AddRightVerb (Verb *RightVerb);

    unsigned long DeleteWrongVerb ();
    unsigned long DeleteRightVerb ();
    unsigned long DeleteUndoneVerb ();

    unsigned long Destroy ();

private:
    std::list<Verb*> m_WrongVerbs;
    std::list<Verb*>::iterator m_wi;
    std::list<Verb*> m_RightVerbs;
    std::list<Verb*>::iterator m_ri;
    std::list<Verb*> m_UndoneVerbs;
    std::list<Verb*>::iterator m_ui;

};

Verb *VerbManager::GetRightVerb()
{
    return m_RightVerbs.front();
}

Verb *VerbManager::GetUndoneVerb() 
{
    return m_UndoneVerbs.front();
}

Verb *VerbManager::GetWrongVerb()
{
    return m_WrongVerbs.front();
}

// Löscht das erste Verb aus der Liste

unsigned long VerbManager::DeleteRightVerb()
{
    m_RightVerbs.pop_front ();

    return 0x00000000;
}

unsigned long VerbManager::DeleteUndoneVerb()
{
    m_UndoneVerbs.pop_front ();

    return 0x00000000;
}

unsigned long VerbManager::DeleteWrongVerb()
{
    m_WrongVerbs.pop_front ();

    return 0x00000000;
}

// Fügt ein Verb hinten an

unsigned long VerbManager::AddRightVerb(Verb *RightVerb)
{
    m_RightVerbs.push_back (RightVerb);

    return 0x00000000;
}

unsigned long VerbManager::AddWrongVerb(Verb *WrongVerb) 
{
    m_WrongVerbs.push_back (WrongVerb);

    return 0x00000000;
}

// Speichert die Verben in eine Datei

unsigned long VerbManager::Save ()
{
    file::file File;

    // Datei öffnen

    if (File.open(L"Verbs.vcm", file::encoding::ANSI, true))
        return 0x00000001;

    unsigned int NumVerbs = static_cast<int>(m_RightVerbs.size());

    // In die Datei schreiben

    if (File.write((void*)(&NumVerbs), sizeof(unsigned int)))
        return 0x00000001;

    for (m_ri=m_RightVerbs.begin(); m_ri != m_RightVerbs.end(); ++m_ri)
    {
        if (File.write((*m_ri), sizeof(Verb)))
            return 0x00000001;
    }

    File.close ();

    return 0x00000000;
}

// lädt die Verben aus einer Datei

unsigned long VerbManager::Load()
{
    file::file File;

    // Verb konstruieren

    Verb *V;

    // Datei öffnen

    if (File.open(L"Verbs.vcm", file::encoding::ANSI))
        return 0x00000001;

    unsigned int NumVerbs = 0;

    unsigned long ReceivedBytes = 0;

    // Gröse der Liste auslesen

    if (File.read((void*)(&NumVerbs), sizeof(unsigned int)))
        return 0x00000001;

    V = new Verb[NumVerbs];

    for (unsigned int i=0; i < NumVerbs; ++i)
    {
        if(File.read((void*)(&V[i]), sizeof(Verb)))
            return 1;

        m_RightVerbs.push_back(&V[i]);
    }

    return 0x00000000;
}

// Zerstört die Listen

unsigned long VerbManager::Destroy()
{
    // Jedes Element durchgehen

    for (m_ri=m_RightVerbs.begin(); m_ri != m_RightVerbs.end(); ++m_ri)
    {
        delete (*m_ri);
    }
    m_RightVerbs.empty ();

    return 0;
}


Die File Klasse ist die aus Patricks ehemaligem Tutorial. Die hab ich net gepostet, weil die Funktioniert(hab sie schon in anderen Projekten benutzt). Und die Save, Load und Destroy sind noch nicht für alle 3 Listen fertig(Nur eine bis jetzt für testzwecke)
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

23.01.2007, 16:50

Habs mal schnell laufen lassen und bei mir läufts auch im Debugmodus ohne Absturz. Allerdings konnt ich das Laden/Speichern nicht testen, da ich genannte Klasse nicht habe, also könnts evtl da Probleme geben.

Noch zwei Fragen:
Warum verwendest du überall unsigned long?
Warum gibst du, ganz unnötigerweise, überall Werte zurück und warum sind diese immer im Hexadezimalsystem geschrieben?

grüße
@D13_Dreinig

8

23.01.2007, 22:12

Hi

unsigned long verwend ich, weil ich normalerweise immer konstanten vom typ const unsigned long zurückgebe.

Hier vll. hilft das das prob zu lösen:

www.halvar-soft.de/Downloads/Verb.zip
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

23.01.2007, 22:29

Zitat von »"Anfänger"«

unsigned long verwend ich, weil ich normalerweise immer konstanten vom typ const unsigned long zurückgebe.


Is zwar keine wirkliche Antwort, aber ok...
@D13_Dreinig

10

24.01.2007, 19:40

Hmmm ist das etwa wieder einer von Patrick anhängern?! Wenn man keine Fehlerbehandlung hat dann sollte der return Wert void sein... und nen interator als Membervariable anzulegen... ist nicht sonderlich sinnvoll... usw
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Werbeanzeige