.at() probleme



  • Man soll doch unter Projekt -> Set programs arguments... -> debug unter host application die lib.a einsetzen.

    Dann hab ich es richtig.
    Er zeigt mir in der Zeile 19 das hier an:

    -------------- Build: Debug in conflib ---------------
    
    Compiling: conflib.cpp
    Compiling: conflib_aus.cpp
    /media/nico_/sicherung/ubuntu/Projekt/conflib/conflib_aus.cpp:19: error: stray ‘\305’ in program
    /media/nico_/sicherung/ubuntu/Projekt/conflib/conflib_aus.cpp:19: error: stray ‘\231’ in program
    Process terminated with status 1 (0 minutes, 2 seconds)
    2 errors, 0 warnings
    


  • 1. Das ist bestimmt nicht "Set program arguments", sondern "Build Options"
    2. Dein Fehler bedeutet AFAIK, dass da irgendwelche ungültigen Zeichen, z.B. Umlaute, in deinem Programm sind.



  • Doch ist Set program arguments.

    Danke für die hilfe wxskip ohne dich wär ich nie weiter gekommen.



  • gamebuntu schrieb:

    Doch ist Set program arguments.

    Danke für die hilfe wxskip ohne dich wär ich nie weiter gekommen.

    OK, ist neu für mich 👍
    Ich hab aber auch noch nie 'ne Library mit Code::Blocks geschrieben.



  • so jetzt find ich nichts mehr aber es kommt bei meiner anwendung immer noch der fehler mit .at().



  • gamebuntu schrieb:

    so jetzt find ich nichts mehr aber es kommt bei meiner anwendung immer noch der fehler mit .at().

    Was findest du nicht mehr?
    Jetzt kannst du ja den Fehler mit dem Debugger suchen.



  • Ich hab ja gesucht aber er findet nichts.



  • Du solltest doch aber zumindest die Zeile herausfinden, wo der Fehler auftritt, oder?



  • hier mal der Quelltext:

    conflib.cpp

    #include <iostream>
    #include <stdlib.h>   //exit();
    
    #include "conflib.hpp"
    
       conf Zeilen;
       conf Conf;
       conf Linien;
    
        void confLoad(const char *Pfad)
        {
    
            Conf.File.open(Pfad, std::ios::in);
    
            while(!Conf.File.eof())
            {
                Conf.File.getline(Linien.linie, 1024);
                Zeilen.zeile.push_back(Linien.linie);
            }
    
        }
    
        void confClose()
        {
            Conf.File.close();
        }
    
        void confSave(const char *Name)
        {
            Conf.File.open(Name, std::ios::out);
        }
    

    conflib.hpp

    #ifndef CONFLIB_HPP_INCLUDED
    #define CONFLIB_HPP_INCLUDED
    
    #include <string>
    #include <vector>
    #include <fstream>
    
    struct conf
    {
        char linie[1024];
        std::fstream File;
        std::vector <std::string> zeile;
    };
    
    extern conf Zeilen;
    extern conf Conf;
    extern conf Linien;
    
    #endif // CONFLIB_HPP_INCLUDED
    

    conflib_aus

    #include <stdlib.h>   //exit();
    #include <iostream>
    
    #include "conflib.hpp"
    #include "conflib_aus.hpp"
    
        conf_aus Search;
        conf_aus A;
        conf_aus E;
        conf_aus Var;
    
        void confGroup(const char *Group_Name)
        {
    
            for(unsigned int i=0; i < Zeilen.zeile.size(); i++)
            {
               int Ende_Name = Zeilen.zeile[i].size();
    
                    if(Zeilen.zeile[i].at(0) == '[' && Zeilen.zeile[i].at(Ende_Name-1) == ']')
                    {
                       Search.Name = Zeilen.zeile[i].substr(1, Ende_Name-1);
    
                       A.Anfang_Group = i + 1;
                       do
                       {
                           i++;
                       }while(Zeilen.zeile[i].at(0) != '[');
                       E.Ende_Group = i - 1;
                    }
    
            }
    
            if(Group_Name != Search.Name.c_str())
            {
                exit(0);
            }else{
                exit(-1);
            }
    
        }
    
        void confRead(const char *Group_Name, const char *Read_Name)
        {
            for(int i = A.Anfang_Group; i < E.Ende_Group; i++)
            {
                int j=0;
                if(Zeilen.zeile[i].at(j) != '=')
                {
                    j++;
                }
    
                if(Read_Name == Zeilen.zeile[i].substr(0, j))
                {
                    exit(0);
                }else{
                    exit(-1);
                }
    
                Var.Name_Var = Zeilen.zeile[i].substr(j+1);
            }
            std::cout << Var.Name_Var << std::endl;
        }
    

    conflib_aus.hpp

    #ifndef CONFLIB_AUS_HPP_INCLUDED
    #define CONFLIB_AUS_HPP_INCLUDED
    
    #include <string>
    
    struct conf_aus
    {
        std::string Name;
        int Anfang_Group;
        int Ende_Group;
        std::string Name_Var;
    };
    
    extern conf_aus Search;
    extern conf_aus A;
    extern conf_aus E;
    extern conf_aus Var;
    
    #endif // CONFLIB_AUS_HPP_INCLUDED
    

    Debug den Quelltext bitte ich weiß nicht was ich falsch mach.



  • Ich debugge deinen Quelltext jetzt nicht, du musst schon selbst schauen, wo dein Fehler auftritt (hast du einen Breakpoint gesetzt?).

    Was mir auffällt, ist dass du in der Datei conflib_aus.cpp mehrfach die Funktion exit() wahrscheinlich falsch verwendest (meinst du da break?).

    Außerdem benutzt du die Funktion at() nur in der Datei conflib_aus.cpp, von daher musst du auch nur dort schauen, vermutlich greifst du auf einen char im string zu, obwohl der string nicht so lange ist.



  • so ich hab den Fehler durch ausprobieren herraus bekommen wo die .at() den Fehler verursachen:

    [cpp] for(unsigned int i=0; i < Zeilen.zeile.size(); i++)
    {
    int Ende_Name = Zeilen.zeile[i].size();

    if(Zeilen.zeile[i][0] == '[' && Zeilen.zeile[i].at(Ende_Name-1) == ']')
    {
    Search.Name = Zeilen.zeile[i].substr(1, Ende_Name-1);

    A.Anfang_Group = i + 1;
    do
    {
    i++;
    }while(Zeilen.zeile[i][0] != '[');
    E.Ende_Group = i - 1;
    }

    }[/cpp]
    Das hat der Debugger mir nicht angezeigt.



  • Hast du dir schon den Hinweis von Fellhuhn auf der 2. Seite angeschaut?



  • ja das hab ich auch weg gemacht.



  • In Zeile 27 von conflib_aus prüfst du nicht, ob i außerhalb der Vektorgrößen liegt.



  • Ich prüfe in der Zeile i ob der erste Buchstabe [ ist.

    Edit:
    Der debugger zeigt mit das an:

    Building to ensure sources are up-to-date
    Build succeeded
    Selecting target: 
    Debug
    Adding source dir: /media/nico_/sicherung/ubuntu/Projekt/conflib/
    Adding source dir: /media/nico_/sicherung/ubuntu/Projekt/conflib/
    Adding file: libconflib.a
    Starting debugger: 
    done
    Registered new type: wxString
    Registered new type: STL String
    Registered new type: STL Vector
    Setting breakpoints
    Debugger name and version: GNU gdb (GDB) 7.1-ubuntu
    No symbol table is loaded.  Use the "file" command.
    Breakpoint 1 ("/media/nico_/sicherung/ubuntu/Projekt/conflib/conflib_aus.cpp:27) pending.
    No symbol table is loaded.  Use the "file" command.
    Breakpoint 2 ("/media/nico_/sicherung/ubuntu/Projekt/conflib/conflib_aus.cpp:19) pending.
    


  • gamebuntu schrieb:

    Ich prüfe in der Zeile i ob der erste Buchstabe [ ist.

    Aber nicht, ob die Zeile i existiert.



  • nein nur ob in der zeile die [ am anfang steht.



  • gamebuntu schrieb:

    nein nur ob in der zeile die [ am anfang steht.

    Hargnnn, das sollte ein Hinweis auf Verbesserung sein!!



  • ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
    bin ich so dooooooooooooooooooooooofffffffffffff 🙄
    Stimmt du hast recht ich muss noch prüfen ob es die Zeile überhaupt gibt. 😃



  • Ohne dich wäre ich nie trauf gekommen danke. 😃


Anmelden zum Antworten