.at() probleme
-
wxskip bei mir kommt :
You must select a host application to "run" a library...
-
gamebuntu schrieb:
wxskip bei mir kommt :
You must select a host application to "run" a library...Klingt danach, als wolltest du eine Library debuggen, ohne sie in einer Anwendung zu benutzen. Wenn es das ist, mach eine Anwendung, in der du die Library verwendest.
-
Ja
Ich bin gerade an meiner ersten aber nur für den Eigengebrauch.
-
Ok hab eine Anwendung gemacht.
-
Und, funktioniert es?
-
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_INCLUDEDconflib_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_INCLUDEDDebug 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.