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 solltectmpauch einintsein. Welcheseofmeinst Du denn? Ich glaube, du willstctmpmitifstream::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 