Compiler



  • Swordfish schrieb:

    Warum prüfst du nicht, ob die Dateien überhaupt geöffnet werden können?

    ich benutz Microsoft Visual c++ 2010 Express , das stellt doch schon beim öffnen des projekts fest ob die dateien geöffnet werden können.Beim Debuggen jedenfalls öffnet es alle dateien erfolgreich.

    rapso schrieb:

    deine frage klingt so als ob du es nur runterprogrammiert haettest und jetzt ein debug-schweinchen suchst der es fuer dich fixt und zum laufen bringt

    Nop habe bis auf die "codieresprache" funktion alles sorgfältig einzeln getestet,bei einem probelauf habe ich schon ein 2-zeilen-code mit einer einfachen sprache die ich in die array reingeschrieben habe übersetzt und dann
    ne korrekte ausgabe-datei herausbekommen.(die sprache und die 2 dateinen hab ich in meinem letzten beitrag als beispiel genommen)

    rapos schrieb:

    was meinst du mit 'probiert'? was genau ist das problem, kannst du uns die zeile sagen ueber die du im debugger stepst und die dennoch nichts ausgibt??

    Nun der Compiler höhrt bei dieser zeile auf und öffnet das consolenfenster 😃

    int main(){
    

    jetzt vermute ich das der Builtvorgang nicht startet.Den es gibt weder eine Ausgabe im Builtfenster noch textdatei wo das protokol vom Builtvorgang drinsteht.

    Hat ihrgent einer ne idee wie man das problem lösen könnte?



  • Wenn er nach dem Druck auf F5/Play-Taste das Konsolenfenster öffnet, führt er offensichtlich dein Programm aus. Mit dem Buildvorgang ist also wahrscheinlich alles in Ordnung. Die Build-Ausgabe siehst du im Ausgabefenster (in der Liste "Erstellen" auswählen).

    Mir scheint, du weißt nicht mit dem Debugger umzugehen. Das solltest du ändern. Der Debugger ist ein wichtiges Werkzeug, mit dem sich jeder Programmierer auskennen sollte. Lies dich da mal schlau! Und für den Anfang: erstelle dein Projekt als Debug-Version (da ist eine Listbox oben in der Toolbar mit mindestens Release und Debug zur Auswahl), setze einen Haltepunkt in der ersten Zeile der main-Funktion (F9) - und staune, dass du das Programm zur Laufzeit anhalten kannst! 🙂



  • Tufelix schrieb:

    Swordfish schrieb:

    Warum prüfst du nicht, ob die Dateien überhaupt geöffnet werden können?

    ich benutz Microsoft Visual c++ 2010 Express, das stellt doch schon beim öffnen des projekts fest ob die dateien geöffnet werden können.

    Warum sollte sich eine IDE darum kümmern ob irgendwelche Dateien, die dein Programm zur Laufzeit versucht zu öffnen, beim laden des Projekts existieren!?

    Tufelix schrieb:

    Beim Debuggen jedenfalls öffnet es alle dateien erfolgreich.

    Ach? Woran erkennst du das?

    Tufelix schrieb:

    Nun der Compiler höhrt bei dieser zeile auf und öffnet das consolenfenster 😃

    int main(){
    

    Würde der /Compiler/ bei dieser Zeile "aufhören", würde er dir als Fehlermeldung auch verraten, warum er das tut.

    Tufelix schrieb:

    jetzt vermute ich das der Builtvorgang nicht startet.

    Wenn der Build nicht starten wuerde, wuerde es dir VS sagen und dich fragen, ob es den letzten erfolgreichen Build ausführen soll.



  • könnt ihr eigentlich den code bei euch erflogreich starten oder ist gibts da auch ein fehler?



  • Ok, dann eben weiter:

    Tufelix schrieb:

    tSprache Sprache[9999999];

    Wtf? Das sind ~600 MB auf dem Stack! Nimm einen std::vector !
    Warum globale Variablen?



  • Der hier ist zu groß für den Stack:

    tSprache Sprache[9999999];
    

    Sowas als Globale zu lösen, ist sowieso sehr unschön...



  • joar die war auch anfangs eingebaut aber die hat nicht die class akzeptiert:

    class tSprache{
    public:
    	string Binärcode;
    	string Name;
    };
    


  • Tufelix schrieb:

    joar die war auch anfangs eingebaut aber die hat nicht die class akzeptiert

    Was?



  • ok ich bau dann der vector wieder ein



  • Tufelix schrieb:

    ok ich bau dann der vector wieder ein

    Aber bitte nicht als Globale!



  • ok dann bau ich sie in der main-anweisungsblock ein und benutz ein zeiger um die sprache an die CodiereSprache funktion zu übergeben.



  • Tufelix schrieb:

    [...] und benutz ein zeiger um die sprache an die CodiereSprache funktion zu übergeben.

    Bitte, bitte nimm eine Referenz!



  • jop das meine ich ja 😃



  • mmh die codiereSprache funktion tun noch nicht richtig...



  • Tufelix schrieb:

    mmh die codiereSprache funktion tun noch nicht richtig...

    Mit der "Fehlerbeschreibung" kann keiner was anfangen. Leuchtet ein, oder? Wie wär's mit Fehlerbeschreibung, eventuell Fehlercode, fehlerhafter Code...?



  • wie kann ich jetzt was in den vector hinein tun? ich muss ja einer der 2 Variabelen in der klasse auswählen, muss ich da ne igene funktion schreiben oder gibts da auch ne andere möglichkeit?



  • Vielleicht willst du einen Konstruktor.

    #include <vector>
    #include <string>
    #include <iostream>
    
    struct foo_t {
    	std::string a;
    	std::string b;
    
    	foo_t( const std::string &param_a, const std::string &param_b ) : a( param_a ), b( param_b ) { }
    };
    
    int main()
    {
    	std::vector< foo_t > bar;
    
    	bar.push_back( foo_t( "Hugo", "Sepp" ) );
    	bar.push_back( foo_t( "Xaver", "Max" ) );
    
    	for( std::vector< foo_t >::iterator i = bar.begin(); i != bar.end(); ++i ) {
    		std::cout << i->a << ", " << i->b << '\n';
    	}
    }
    


  • ok danke, jetzt tut der übersetzt einwandfrei.



  • Nun als ich eine kompexe sprache dem übersetzter einlesen habe kam es zu einem Fehler(string subscript out of range) wärend die "CodiereSprache"funktion die 12. zeile des "Sprach text" bearbeitet.Komischerweise ist das bei jeder Sprache die ich einlese so.Hat wer ne idee an was das liegen könnte?

    CodiereSprache:

    void CodiereSprache(string Satz
    					,vector<tSprache> &Sprache)
    {
    
    int SpalteBinär=0;
    
    	while(isalnum(Satz[SpalteBinär])!=0 && isalnum(Satz[SpalteBinär+1])!=1)
    	{
    	SpalteBinär++;
    
    	}
    
    	int Ende=SpalteBinär;
    
    SpalteBinär++;
    
    int Spalte=SpalteBinär;
    
    	while(isalnum(Satz[SpalteBinär])!=0 && isalnum(Satz[SpalteBinär+1])!=1)
    	{
    
    	SpalteBinär++;
    
    	}
    
    	Sprache.push_back(tSprache(Satz.substr(0,Ende),Satz.substr(Spalte,SpalteBinär)));
    	cout <<Spalte<<" " << SpalteBinär<<endl;
    


  • Das Problem tritt wahrscheinlich eher bei der Zeile davor auf (Zeile 10). Mach dort mal einen Haltepunkt und überprüfe, ob Satz[SpalteBinär+1] auch wirklich im gültigen Bereich ist. Wahrscheinlich ist SpalteBinär+1 größer als Satz.size() (oder kleiner als 0).


Anmelden zum Antworten