|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 02.06.2005, 21:04 Titel: Problem mit push_back bei Vector |
|
|
Anscheinend scheint ein vector bei mir nichtn richtig zu "pushen"...
CPP: | template<typename T> class CClass1
public:
struct Key
{
float time;
T value;
};
struct KeyEntry
{
Key* p_key;
bool operator < (const KeyEntry& k) const
{return p_key->time <= k.p_key->time;}
};
void addKey(float time,
const T& value)
{
KeyEntry key;
key.p_key = new Key;
key.p_key->time = time;
key.p_key->value = value;
keys.push_back(key);
std::sort(keys.begin(), keys.end());
}
private:
std::vector<KeyEntry> keys;
T stdValue;
};
|
In addKey is key.p_key=0x00F91DB0, in StructKey::operator < jedoch k.p_key=0xFDFDFDFD... Somit schmiert das Programm beim Aufruf vom k.p_key->time ab... Waru das?!?
Ich bin schon total verzweifelt... Es funktioniert nix! Es scheint mir irgendwie im keys.bush_back zu liegen... Ich nutze einen VC++ 6.0 unter Win.
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 02.06.2005, 21:08 Titel: |
|
|
Das einzigste was mir einfallen würde ist, dass beim Vector bei einer reallokalisierung alle Iteratoren ihre Gültigkeit verlieren. _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 02.06.2005, 21:17 Titel: |
|
|
Es wird kein realloc gemacht... Ich verstehs net...
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 02.06.2005, 21:31 Titel: |
|
|
FH hat Folgendes geschrieben: | Es wird kein realloc gemacht... Ich verstehs net...
Gruß
FH |
Aber wenn du bei einem Vector ein neues Element hinzufügst, dann werden alle Elemente neu erstellt, damit sie alle im Speicher wieder hintereinander liegen. Versuch doch mal, statt einem vector eine list zu nehmen. Wenn das Problem dann nicht mehr auftriff, lags höchstwahrscheinlich daran. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 03.06.2005, 19:53 Titel: |
|
|
Danke Lord, werds versuchen: Erstmal was anderes:
Auch schon innerhalb von addKey enthält das letzte Element von keys diesen unsinnigen Wert 0xFDFDFDFD.
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 03.06.2005, 20:58 Titel: |
|
|
Lord: Dann artet alles in ne Katastrophe aus: Ich muss einen iterator definieren... Der is als
CPP: | mutable std::list<KeyEntry>::iterator it; | definiert.
Dann kommt folgendes:
Compiler hat Folgendes geschrieben: | --------------------Konfiguration: EMM_Test - Win32 Debug--------------------
Kompilierung läuft...
animation.cpp
c:\...\controller.h(144) : error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::Key
Entry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::const_iterator' akzeptiert (oder keine geeignete Konvertierung moeglich)
c:\...\controller.h(140) : Bei der Kompilierung der Member-Funktion 'const struct emmloader::Controller<struct emmloader::PositionValue>::Key *__thiscall emmloader::Controller<struct emmloader::PositionValu
e>::getKeyAfter(float) const' der Klassenvorlage
scene.cpp
c:\programme\microsoft visual studio\vc98\include\algorithm(542) : error C2784: '_D __cdecl std::operator -(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : Vorlagenargument fuer 'co
nst class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' von 'class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iter
ator' konnte nicht hergeleitet werden
c:\programme\microsoft visual studio\vc98\include\algorithm(539) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Sort_0(class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::K
eyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iterator,class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controll
er<struct emmloader::PositionValue>::KeyEntry> >::iterator,struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry *)'
c:\programme\microsoft visual studio\vc98\include\algorithm(542) : error C2784: '_D __cdecl std::operator -(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : Vorlagenargument fuer 'co
nst class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' von 'class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iter
ator' konnte nicht hergeleitet werden
c:\programme\microsoft visual studio\vc98\include\algorithm(539) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Sort_0(class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::K
eyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iterator,class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controll
er<struct emmloader::PositionValue>::KeyEntry> >::iterator,struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry *)'
c:\programme\microsoft visual studio\vc98\include\algorithm(542) : error C2784: '_D __cdecl std::operator -(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : Vorlagenargument fuer 'co
nst class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' von 'class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iter
ator' konnte nicht hergeleitet werden
c:\programme\microsoft visual studio\vc98\include\algorithm(539) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Sort_0(class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::K
eyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iterator,class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controll
er<struct emmloader::PositionValue>::KeyEntry> >::iterator,struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry *)'
c:\programme\microsoft visual studio\vc98\include\algorithm(542) : error C2784: '_D __cdecl std::operator -(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : Vorlagenargument fuer 'co
nst class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' von 'class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iter
ator' konnte nicht hergeleitet werden
c:\programme\microsoft visual studio\vc98\include\algorithm(539) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Sort_0(class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::K
eyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iterator,class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controll
er<struct emmloader::PositionValue>::KeyEntry> >::iterator,struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry *)'
c:\programme\microsoft visual studio\vc98\include\algorithm(542) : error C2676: Binaerer Operator '-' : 'class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controller<struct
emmloader::PositionValue>::KeyEntry> >::iterator' definiert diesen Operator oder eine Konvertierung in einen fuer den vordefinierten Operator geeigneten Typ nicht
c:\programme\microsoft visual studio\vc98\include\algorithm(539) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Sort_0(class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::K
eyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iterator,class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controll
er<struct emmloader::PositionValue>::KeyEntry> >::iterator,struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry *)'
c:\programme\microsoft visual studio\vc98\include\algorithm(546) : error C2784: 'class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> __cdecl std::operator +(_D,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : Vorlagenargument fuer '' von 'cla
ss std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iterator' konnte nicht hergeleitet werden
c:\programme\microsoft visual studio\vc98\include\algorithm(539) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Sort_0(class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::K
eyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iterator,class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controll
er<struct emmloader::PositionValue>::KeyEntry> >::iterator,struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry *)'
c:\programme\microsoft visual studio\vc98\include\algorithm(546) : error C2676: Binaerer Operator '+' : 'class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controller<struct
emmloader::PositionValue>::KeyEntry> >::iterator' definiert diesen Operator oder eine Konvertierung in einen fuer den vordefinierten Operator geeigneten Typ nicht
c:\programme\microsoft visual studio\vc98\include\algorithm(539) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Sort_0(class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::K
eyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iterator,class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controll
er<struct emmloader::PositionValue>::KeyEntry> >::iterator,struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry *)'
c:\programme\microsoft visual studio\vc98\include\algorithm(546) : error C2780: 'void __cdecl std::_Insertion_sort(_RI,_RI,_Pr)' : Erwartet 3 Argumente - 2 unterstuetzt
c:\programme\microsoft visual studio\vc98\include\algorithm(619) : Siehe Deklaration von '_Insertion_sort'
c:\programme\microsoft visual studio\vc98\include\algorithm(539) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Sort_0(class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::K
eyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iterator,class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controll
er<struct emmloader::PositionValue>::KeyEntry> >::iterator,struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry *)'
c:\programme\microsoft visual studio\vc98\include\algorithm(547) : error C2676: Binaerer Operator '+=' : 'class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controller<struc
t emmloader::PositionValue>::KeyEntry> >::iterator' definiert diesen Operator oder eine Konvertierung in einen fuer den vordefinierten Operator geeigneten Typ nicht
c:\programme\microsoft visual studio\vc98\include\algorithm(539) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Sort_0(class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::K
eyEntry,class std::allocator<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry> >::iterator,class std::list<struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry,class std::allocator<struct emmloader::Controll
er<struct emmloader::PositionValue>::KeyEntry> >::iterator,struct emmloader::Controller<struct emmloader::PositionValue>::KeyEntry *)'
[...]
EMM_Test.exe - 28 Fehler, 0 Warnung(en)
|
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Zuletzt bearbeitet von FH am 03.06.2005, 23:54, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 03.06.2005, 21:06 Titel: |
|
|
*lol*
Welchen Compiler benutzt du? Wenn der VC++ 6.0, dann kann es an dem Compilerbug liegen, der nicht mit dem Sortieren von STL-Listen klarkommt
Hmm...aber kannst du vielleicht mal den Code zeigen, bei dem du addKey aufrufst? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 03.06.2005, 21:11 Titel: |
|
|
Patrick: Ist nicht mein Code. Stammt aus dem EMM-SDK von Scherfgen. In seinem Forum hat aber auch keiner eine Ahnung, wo der Fehler liegt. Und er selbst hat dazu nix geäußert.
Lord:
CPP: | // Anzahl der Keys lesen
DWORD numKeys;
ReadFile(file, &numKeys, sizeof(DWORD), &numBytesRead, 0);
if(numBytesRead != sizeof(DWORD))
{
setError("Unexpected end of file when reading ROTATION_TRACK chunk!");
delete p_anim;
return FALSE;
}
// die Keys selbst lesen
for(DWORD i = 0; i < numKeys; i++)
{
RotationKey key;
ReadFile(file, &key, sizeof(RotationKey), &numBytesRead, 0);
if(numBytesRead != sizeof(RotationKey))
{
setError("Unexpected end of file when reading ROTATION_TRACK chunk!");
delete p_anim;
return FALSE;
}
// Key hinzufügen
p_anim->rotCtrl.addKey(key.time, key.value);
} |
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 03.06.2005, 21:20 Titel: |
|
|
FH hat Folgendes geschrieben: | Ist nicht mein Code. Stammt aus dem EMM-SDK von Scherfgen. In seinem Forum hat aber auch keiner eine Ahnung, wo der Fehler liegt. Und er selbst hat dazu nix geäußert. |
Wen wunderts... was meinste wohl wieso ich diese Community damals verlassen habe? Ich konnte diese Schwachköpfe nicht mehr ertragen. Immer dieser "Scherfgen-Hype", wurd ja noch schlimmer als dieser "Zerbie-Hype".
In Mahtematik ist er zwar ein 1337 aber in Coding... boah nee... EMM-SDK? Das war doch der Schwachsinn mit den Bones oder? _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 03.06.2005, 21:24 Titel: |
|
|
Ich denke, dass es das ist. Weiß net genau, was du meinst.
Ich muss mich halt damit herumschlagen. Oder hast du ein Mesh-FOrmat, dass man schön schnell von .3ds auf den Bildschirm bringt (das conv3ds is ja wohl ein Witz!).
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 03.06.2005, 21:27 Titel: |
|
|
Von weitem ist es schwer, was konkretes zu sagen.
Was ich mal versuchen würde, ist das hier:
CPP: | key.p_key = new Key;
key.p_key->time = time;
key.p_key->value = value; |
erst hinter den push_back-Aufruf zu stellen und den Schlüssel dann natürlich über den vector 'keys' aufzurufen.
Was anderes könnte ich mir gerade nicht vorstellen. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 03.06.2005, 21:37 Titel: |
|
|
Negativ. Da kommt der selbe Blödsinn.
Aber eine neue Info: Es scheint es jetzt (fragt net, warum), dass die Einträge im vector vor sort noch in Ordnung sind... Nur eben beim Aufruf des operators < net mehr
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 07.06.2005, 18:17 Titel: |
|
|
Vector die Zweite:
Ihr kennt wohl alle den Code von Dr. Best, den 3DS-Loader. Der funzt wunderschön, nur der Destruktur baut Müll!
CPP: | C3dsFileLoader::~C3dsFileLoader(){
// [...]
for(i=0;i<sobject;i++){
pobject=&(object[i]);
SAFE_ARRAY_DELETE(pobject->name); |
Beim SAFE_ARRAY_DELETE kracht es! Mal is pobject 0x4DC, mal 0. Das 0 überprüf ich dann in net if-bedingung, aber das 0x4DC is ja wohl net normal! Irgendwie is in meinem Vector der Wurm drin! Ich hab den Compiler jetzt schon 2 mal neu installiert. Ändert sich nichts! habt ihr es mal unter dem VC++ 6.0 probiert?
Ich krieg die Krise!!!
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|