Fehler C1004 - Unerwartetes Dateiende gefunden



  • Hallo,

    ich bin absolute C++ - Anfängerin.
    Ich möchte Zeichen aus einer Datei einlesen und eine Frequenzstatistik erstellen.
    Wenn ich kompilieren will, kommt immer die Fehlermeldung
    "1>d:\uni potsdam\3. semester\c++\huffman\frequenz.cpp(67) : fatal error C1004: Unerwartetes Dateiende gefunden".
    Kann mir jemand sagen wo der Fehler liegt?
    Außerdem wäre ich jedem dankbar, der mich auf andere Fehler aufmerksam macht, auch wenn es nicht zur Lösung des Problems führt 🙂

    Hier mein Code:

    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    
    class Frequenz 
    {
    	int freq[256];			// Zeichenzähler
    	int total_char_count;		// Gesamtanzahl der gelesenen Zeichen
    
    	// Standardkonstruktor
    	Frequenz() 
    	{
    		init();
    	}
    
    	// Konstruktor
    	Frequenz(string s) 
    	{
    		init();
    		freqcheck(s);
    	}
    
    	// Destruktor
    	~Frequenz() 
    	{
    	}
    
    	// Frequenzstatistik erstellen
    	void freqcheck(string s)
    	{
    		ifstream file;
    		file.open("test.txt", ios::in);
    		char ctmp = file.get();
    		while(ctmp != eof()) 
    		{
    			freq[(int)ctmp]++;
    			total_char_count++;	
    			ctmp = file.get();
    			file.close();
    		}
    	}
    
    	// Initialisiere Datenstrukturen
    	void init() 
    	{
    		// Initialisierung: alle Zähler auf 0 setzen
    		for (int i = 0; i < sizeof(freq)/sizeof(int); ++i) 
    		{
    			freq[i] = 0;
    		}
    		// Zähler für die Gesamtzeichenanzahl (ohne '\0' und '\n')
    		total_char_count = 0;
    	}
    
    	int main()
    	{
    		return 0;
    	}
    
    }
    


  • Es fehlt ein Semikolon am Ende der Klasse 😉



  • Wow, das ist peinlich, das war zu einfach, da hätt ich auch als Anfänger drauf kommen müssen.
    Dankeschön!

    Nun ergeben sich natürlich gleich die nächsten Probleme.
    Er beschwert sich darüber, dass in Zeile 31 ein Semikolon vor dem Punkt fehlen würde
    (1>d:\uni potsdam\3. semester\c++\huffman\frequenz.cpp(35) : error C2143: Syntaxfehler: Es fehlt ';' vor '.')
    Ich hab aber keine Ahnung, wo genau das jetzt hin soll.

    In Zeile 37 bekomme ich die Warnung
    "1>d:\uni potsdam\3. semester\c++\huffman\frequenz.cpp(37) : warning C4805: '!=': unsichere Kombination von Typ 'char' mit Typ 'bool' in einer Operation"
    Kann ich das Problem irgendwie umgehen?



  • ISO/IEC 14882:1998 schrieb:

    3.6.1 Main function [basic.start.main]

    A program shall contain a global function called main, which is the designated start of the program.

    Also schmeiß erstmal die main( ) aus Deiner Klasse raus.

    std::ifstream::get( ) liefert einen Integer. Somit sollte ctmp auch ein int sein. Welches eof meinst Du denn? Ich glaube, du willst ctmp mit ifstream::traits_type::eof( ) vergleichen.

    cheers, Swordfish



  • main() is weg 🙂

    ifstream::traits_type::eof( ) sagt mir nichts. Ich werd mal in dei Referenzen schauen und versuchen etwas zu verstehen^^
    Mein Plan war:

    void freqcheck(string s)
    	{
                      // DATEI ÖFFNEN
    		fstream file.open(s, fstream::in);
    
                      // ERSTES ZEICHEN HOLEN UND IN ctmp SPEICHERN
    		char ctmp = file.get();
    
                      // ERHÖHEN, SOLANGE DAS ENDE DER DATEI NICHT ERREICHT IST
    		while(ctmp != file.eof()) 
    		{
    			freq[(int)ctmp]++;
    			total_char_count++;	
    			ctmp = file.get();
    			file.close();
    		}
    	}
    


  • Also mit EOF ist die Warnung weg, aber der Fehler mit dem Semikolon bleibt.

    void freqcheck(string s)
    	{
    		fstream file.open(s, fstream::in);
    		char ctmp = file.get();
    		while(ctmp != [b]EOF[/b]) 
    		{
    			freq[(int)ctmp]++;
    			total_char_count++;	
    			ctmp = file.get();
    			file.close();
    		}
    	}
    


  • Das hier

    fstream file.open(s, fstream::in);
    

    sollte eher so aussehen

    ifstream file(s.c_str());
    


  • Ihr seid super!

    Kann mir jetzt noch jemand sagen warum ich folgende Meldung bekomme?

    LINK : fatal error LNK1561: Einstiegspunkt muss definiert werden.



  • Klar : main war ja nicht "falsch", sondern nur "an der falschen Stelle".

    Sprich: Nicht in die Klassendefinition, sondern als freie Funktion dahinter.
    Gruß,

    Simon2.



  • Weil Du die main( ) nicht aus dem gesamten Programm rauskicken sollst, sondern nur aus der Klasse ➡ global definieren.

    cheers Swordfish

    //edit: verdammte 34s zu laaaaangssam *fluch*



  • Ok, vielen Dank, dann bastel ich mal weiter 🙂

    ➡ fast 2 Stunden später: ES KLAPPT 😃


Anmelden zum Antworten