.at() probleme
-
gamebuntu schrieb:
OK
Ich benutz als IDE Code Blocks für Linux.
Was habt ihr für IDEs, könnt ihr mir vielleicht eine bessere empfehlen.Tut nichts zur Sache, hab ich auch (unter Windows, unter Linux hab ich noch nie debuggt). Geh in deinem Projekt auf Project->Build Options und links auf Debug (sonst nimm was anderes), dann schalte -p an und -s aus (falls es noch nicht stimmt). Du solltest das Ganze im gleichen Modus kompilieren (also oben in der Symbolleiste auch auf Debug oder das, was du genommen hast, schalten).
Dann setzt du links irgendwo einen Breakpoint (der rote Punkt rechts neben der Zeilenzahl) und startest den Debugger mit F8. Er sollte entweder bei einer Benutzerinteraktion auf deine Aktivität warten oder direkt zum Breakpoint gelangen. Mit F7 kannst du dann Debuggen. (Ich bin mir nicht ganz sicher, ob das mit den F-Tasten funktioniert, bei mir hat's einmal funktioniert und sonst nicht, vielleicht war das, als ich Compiz hatte, sonst nimm einfach die Symbolleiste oder das Menü).P.S. Unter Debug->Debugging Windows->Watches kannst du die Werte von lokalen Variablen und Funktionsparametern betrachten.
-
Bitte nicht sowas machen:
unsigned int i = vec.size(); for(unsigned int j = 0; j < (i - 1); ++j) { //... }Denn bei dem (i - 1) kommt bei size == 0 NICHT -1 raus. Schließlich ist das unsigned.
-
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.