Probleme bei Neukompilierung unter Linux (kdevelop)



  • Hallo!

    Vor ein paar Tagen hab' ich mir SUSE 9.2 installiert. Vorher hab' ich Windows benutzt. Nun möchte ich ein C++ Projekt, das ich noch unter Windows geschrieben habe mit kdevelop 3.1 kompilieren. Ich habe ein Projekt erstellt, und meine Quelldateien in das Projekt integriert. Nun klicke ich auf "Projekt erstellen" und erhalte folgenden Output:

    cd '/home/Andreas/earley' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake -f Makefile.cvs && cd '/home/Andreas/earley/optimized' && CXXFLAGS="-O2 -g0" "/home/Andreas/earley/configure" && cd '/home/Andreas/earley/optimized' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake -k
    Installation der Datei -c
    Kompilieren der Datei yes (gcc)
    Kompilieren der Datei yes (g++)
    Kompilieren der Datei earley.cpp (g++)
    Kompilieren der Datei EdgeVek.cpp (g++)
    Kompilieren der Datei InsertCell.cpp (g++)
    Kompilieren der Datei InsertVek.cpp (g++)
    Kompilieren der Datei LexVek.cpp (g++)
    Kompilieren der Datei Matrix.cpp (g++)
    Kompilieren der Datei Parser.cpp (g++)
    Kompilieren der Datei RuleElementVek.cpp (g++)
    Kompilieren der Datei RuleVek.cpp (g++)
    Kompilieren der Datei Transkription.cpp (g++)
    *** Beendet mit Status: 2 ***

    Unter "Probleme" finde ich dann auch noch sehr seltsame Fehlermeldungen:
    LexVek.cpp, Zeile 59, Spalte 23: } erwartet
    (Diese Meldung erscheint 4x)
    LexVek.cpp, Zeile 59, Spalte 23: ':' expected found '?'
    (Das Fragezeichen ist dabei noch von einem roten Kreis umgeben.)

    Der zugehörige Code sieht so aus:

    bool LexVek::create(void)
    {
    
    	// Pfad der Datei, aus der das Lexikon generiert werden soll.
    	char Path[256]="Ausgabe3.txt";
    
    	// Datei zum lesen öffnen
    	ifstream lexikonSource(Path);
    	if (!lexikonSource)
    	{
    		cout << "Fehler beim öffnen der Datei";
    	}
    	string Wort, Kategorie;
    	while( !lexikonSource.eof() )
    	{
    		// Falls Vektor voll, dann Vektor vergrössern
    		if (anz+1>max)
    			expand(anz+1);
    	[cpp]	// Wort + Wortkategorie aus Datei einlesen
    		getline(lexikonSource,Wort,'\n');
    		getline(lexikonSource,Kategorie,'\n');
    
    		++total_count; // Summe der Token erhöhen
    
    		// Nur Substantive und Eigennamen werden grossgeschrieben
    		if ( (Kategorie!="NN" && Kategorie!="NE") && (Wort[0]<'0'|| Wort[0]>'9') )
    		{
    			switch(Wort[0])
    			{
    				case 'Ä': Wort[0]='ä';  // HIER WERDEN DIE FEHLER ANGEZEIGT!!!
    						  break;
    				case 'Ö': Wort[0]='ö';
    						  break;
    				case 'Ü': Wort[0]='ü';
    						  break;
    				default : Wort[0]=tolower(Wort[0]);
    			}
    		}
    
    		// "ß" durch "ss" ersetzen
    		int pos=Wort.find("ß");
    		if (pos!=string::npos)
    			Wort.replace(pos,1,"ss");
    
    		// Testen, ob schon ein identischer Eintrag existiert...
    		bool exist=false;
    		for (int i=0; i<anz; i++)
    		{
    			if (lexPtr[i].word==Wort && lexPtr[i].Kategorie==Kategorie)
    			{
    				exist=true;
    				++lexPtr[i].count;
    				break;
    			}
    		}
    
    		// ... Falls nicht: neuen Eintrag einfügen
    		if (!exist)
    		{
    			lexPtr[anz].word     =Wort;
    			lexPtr[anz].Kategorie=Kategorie;
    			lexPtr[anz].count   =1;
    
    			// Anzahl aktualisieren
    			if ( !lexikonSource.eof() ) 
    			{
    				//locate(11,1); 
    				cout << ++anz << endl;
    			}
    		}
    	}
    	// Datei schliessen
    	lexikonSource.close();
    
    	// Sortieren nach Wörtern und Kategorie:
    	word_Sort(0, anz-1);
    	categorie_Sort();
    
    	// Alle Wörter speichern
    	storeLex();
    	return true;
    }
    

    Derselbe Code funktioniert tadellos, wenn ich ihn unter Windows mit DevCpp compiliere...

    Weiss jemand, was da falsch ist???
    Danke für die Hilfe im voraus!



  • Kann es sein, dass die Datei in einem Encoding abgespeichert wird, die der Compiler nicht versteht, vor allem wenn es um Zeichen wie ÄÖÜ geht?



  • Das scheint tatsächlich des Pudels Kern zu sein: Wenn ich die entsprechende Stelle zur Probe auskommentiere, erhalte ich denselben Fehler in einer anderen Datei, auch wieder an einer Stelle, die mit Umlauten zu tun hat. Werde mal schauen, wie sich das umgehen lässt!
    Danke!!



  • Google mal nach dos2unix, da solltest du einige Tools finden, die dir die Dateien ins Unix übliche Format umwandeln. (Gibt es sogar Online)

    Ansonsten kannst du den Zeichensatz mit man: iconv(1) konvertieren.


Log in to reply