Die Elemente eines Elements in einem Vector ??[GELÖST]



  • Hallo Leute ich habe eine frage zu meinem code, ich weiß wo das problem ist und wahrscheinlich auch wie es ausgelöst wurde, aber ich habe keinen Plan wie ich es lösen soll also, ich bin gerade dabei ein ACSII Rougelike SPiel zu machen und das Problem taucht auf wenn ich die Position des Spielers herausfinden will.
    Dazu habe ich einen Loop gemacht, der aber ein problem hat:

    for (int i = 0; i = lvlContent.size(); i++){
    for (int j = 0; j = lvlContent[i].size(); j++){
    if (lvlContent[i][j] == '@'){

    i = _Y;
    j = _X;

    }

    }
    }

    Dass ist der Loop an sich. also:
    lvlContent ist der Vector in dem das Level gespeichert ist
    @ ist der Player

    die error meldung die ich dabei immer bekomme ist das hier:
    -------------------------------------------------------------
    Micorsoft Visual C++ Runtime Library

    Debug Assertion Failed!

    Program: C:\Windows\system32\MSVCP120D.dll
    File: c:\program files (x86)\microsoft visual studio 12.0\vc\include\vector
    Line: 1201

    Expression: vector subscript out of range

    For information on how your program can cause an assertion
    failure, see the Visual C++ documentation on asserts.
    ------------------------------------------------------------------

    Vielen dank schonmal für deine Hilfe im voraus 🙂
    [code="cpp"]



  • i = lvlContent.size()
    

    size ist eins zu viel für den Index. Größte Index ist immer size-1. Davon abgesehen sollte da kein = stehen.



  • [code="cpp"]
    OK,stimmt, die fehlermeldung ist jetzt weg, aber ich weiß nicht was du mit dem zuviel für den index meinst, was soll ich stattdessen den hinschreiben weil so der Loop einfach nie endet



  • Leon285 schrieb:

    OK,stimmt, die fehlermeldung ist jetzt weg, aber ich weiß nicht was du mit dem zuviel für den index meinst, was soll ich stattdessen den hinschreiben weil so der Loop einfach nie endet

    Angenommen dein vector hat 5 Elemente. Dann ist size() ==> 5. Die Indizierung Beginnt immer bei 0. Bei 5 Elementen also von 0 bis 4. 5 ist eins größer als 4. also ist size() um eins zu groß.

    for (int i = 0; i != lvlContent.size(); i++){
    for (int j = 0; j != lvlContent[i].size(); j++){
    

    so zum Beispiel.



  • Gerade wenn ich das so mache, wie ich schon gesagt habe verschwindet die fehlermeldung, aber der loop ist unendlich.
    und lvlContent.size() har definitiv einen wert da ich es mit:

    int lvlContentSize = lvlContent.size();

    cout << lvlContent.size() << endl;
    cout << lvlContentSize << endl;

    ausprobiert habe



  • Leon285 schrieb:

    Gerade wenn ich das so mache, wie ich schon gesagt habe verschwindet die fehlermeldung, aber der loop ist unendlich.

    Du darfst die Laufvariablen im Schleifenrumpf nicht grobfahrlässig ändern. Wer weiß was _Y _X für Werte hat?



  • die waren/sind 0, wo ist das problem dabei?



  • Leon285 schrieb:

    die waren/sind 0, wo ist das problem dabei?

    Genau das ist das Problem. Dann läuft die Schleife eventuell unendlich lange, oder du bekommst mal wieder eine out of range exception.



  • ok, Wie würdest du dann vorschlagen wie ich die werte am besten returne?



  • Leon285 schrieb:

    ok, Wie würdest du dann vorschlagen wie ich die werte am besten returne?

    Ich weiß nicht was dein Programm da machen soll, ich verstehe die Zuweisungen an i und j in der if nicht. Musst du mir erklären.



  • Ich loope durch das spielfeld lvlContent mit den loops i und j um die Position von dem spieler zu bekommen, halt die x und y achse von dem vector, der vector besteht aus strings und die buchstaben der string stellen die symbole auf der x achse dar.
    und wie gesagt will ich mit den loops die position, also x und y coordinate die ich dann in die beiden punkte speicher und weiter verwenden kann um den spieler später zu bewegen



  • Das mit dem _X und _Y hat sich erledigt, vielen dank



  • }


Anmelden zum Antworten