Problem mit Templates



  • Ach ja zum Titel. Meiner Meinung nach hat der Fehler irgendwas mit der Templateliste zu tun, da kein Fehler erscheint, sobald ich StoneList <<= Test weglasse.


  • Administrator

    KingLuc schrieb:

    OK dann lass den Quelltext einfach. Hast du sonst eine Idee wie es zu solch einer Fehlermeldung kommen kann?

    Wie sollte ich das? Ich weiss ja nicht mal welcher Debugger du verwendest.

    KingLuc schrieb:

    Ach ja zum Titel. Meiner Meinung nach hat der Fehler irgendwas mit der Templateliste zu tun, da kein Fehler erscheint, sobald ich StoneList <<= Test weglasse.

    Ich soll den Code nicht berücksichtigen, aber StoneList <<= Test im Code suchen gehen, oder wie?

    Mir kommt da aber so eine Idee. Könnte es sein, dass dein Programm mit einer Fehlermeldung abbricht, du auf Wiederholen oder sowas ähnliches drückst und danach erst diese Fehlermeldung kommt? Oder kurz gesagt, dass du uns Informationen vorenthälst, bzw. die richtige Fehlermeldung?

    Grüssli



  • Also mein Problem ist, dass sobald ich ein Element in eine Instanz von cTemplateList einfüge, zeigt er mir bei

    if(!QueryPerformanceFrequency((LARGE_INTEGER*)&Frequency))
    		Error("Performance Counter nicht verfügbar");
    
    	Interval = Frequency / FRAME_RATE;
    	QueryPerformanceCounter((LARGE_INTEGER*)&ActualTime);
    	NextFrame = ActualTime + Interval;
    

    die Fehlermeldung, die oben steht.

    Ich benutze Visual C++ 2008. Diese Fehlermeldung ist die einzige, die ich erhalte wenn ich auf Start im Debug-Mods klicke. Ich muss dazu sagen, dass die Templatelist vorher ohne Probleme lief. Erst als ich in spriteclass.h unter private von cSprite die Zeile

    cTemplateList<cTemplateList<int>> animationList;
    

    eingefügt und gestartet habe, ergaben sich diese Probleme. Als ich diese Zeile entfernt habe, lief das Programm wieder. Nun habe ich noch die Methode deleteList() von cTemplateList deklariert. Von da an funktioniert gar nichts mehr und er zeigt mir die oben genannte Fehlermeldung.

    Ich habe deleteList() natürlich wieder rausgenommen, doch das Programm funktioniert trotzdem nicht.

    Ich entschuldige mich dafür, dass ich im ersten Beitrag nur "Schrott" geschrieben habe.



  • Wie bereits gesagt wurde ist "There is no source code available" keine Fehlermeldung. Und "funktioniert nicht" übrigens auch nicht.



  • also einige Anmerkugnen:
    - ich hab mir natürlich nicht den kompletten Code durchgelesen, aber eines deiner includes ist stddef.h - das ist ein C-header. In C++ bindest du besser <cstddef> ein, der biete die selben Funktionen, allerdings im namespace std. Am besten wäre es natürlich, wenn du garnicht erst header aus der C-Bibliothek brauchst sondern die Funktionalität aus der C++-Bibliothek bekommen kannst.

    KingLuc schrieb:

    if(!QueryPerformanceFrequency((LARGE_INTEGER*)&Frequency))
    

    Das (LARGE_INTEGER*) ist ein C-Cast und hat in C++ so nichts zu suchen. Benutz dynamic_cast oder static_cast, je nach Kontext.
    - die "no source code available" meldung kommt wie andere schon sagten vom Debugger und heißt, dass er bei dem Code-schritt den er grde ausführt keinen zugehörigen Source-Code kennt. Das kann daran liegen dass du eine externe vorkompilierte Bibliothek benutzt die keinen Sourcecode mitgeliefert hat oder dass ein Teil des Codes ohne debuginformationen kompiliert wurde und damit kein bezug zum sourcecode hergestellt werden kann.



  • Mir ist aufgefallen, dass er ein Problem mit LONGLONG (bzw. __int64) hat. Wenn ich zum Beispiel

    Interval = Frequency / FRAME_RATE; //FRAME_RATE ist mit 80 defined
    

    durch

    unsigned long x = Frequency;
    Interval = x / FRAME_RATE;
    

    ersetze, zeigt er mir im Debug-Modus keinen Fehler an. Außerdem funktionieren Addition und Subtraktion von Frequency und FRAME_RATE problemlos. Wenn ich allerdings dividiere oder multipliziere zeigt er mir den Fehler an.
    Manchmal zeigt er kurz vor der Fehlermeldung an, welche Datei er sucht. In diesem Fall war es ulldiv.asm. Was ist das?



  • - Wenn er einen Fehler anzeigt, solltest du den auch hier wiedergeben, da wir mangels Glaskugel nicht sagen können welcher fehler das ist.
    - Beim weiteren Überfliegen deines Quelltextes hab ich einige #defines für Konstanten gesehen, das ist nicht nur PFUI, das ist widerlich. Sowas tut man vielleicht in C, aber auf keinen Fall in C++. Dafür gibts const static int/double/std::string/.....
    - LONGLONG bzw. __int64 sind beide keine Standard-Datentypen. Wenn du nicht einen sehr guten grudn hast sie zu benutzen solltest du es bei long oder einfach int belassen.



  • Ich habe den Fehler inzwischen gefunden. Mein Computer ist ein 32-bit-System. Daher kann er mit __int64 nicht ohne weiteres multiplizieren oder addieren. Er benötigt dafür eine Datei namens ulldiv.asm, die er an meinem Rechner nicht findet. Daher der Fehler: There is no source code available for the current location.

    Ic hhabe __int64 jetzt durch float ersetzt und es funktioniert einwandfrei.
    Nochmal vielen Dank an alle, die mir geholfen haben.



  • KingLuc schrieb:

    Ic hhabe __int64 jetzt durch float ersetzt und es funktioniert einwandfrei.

    Bis jetzt. Denn es ist nicht gerade ungefährlich, was du da machst. Vor allem ist es nicht genau. Weshalb, siehst du in einem der vielen Rundungsfehler-Threads...


  • Mod

    Am Nachwuchs für WTFs wird es auch in Zukunft nicht mangeln...


Anmelden zum Antworten