Jan Rakelmann schrieb am Wed, Apr 04, 2007 at 09:59:30PM +0200 folgendes:
Hallo,
ich bin jetzt nicht so der C++-Guru aber der Code sieht schon etwas komisch (veraltet?) aus.
Nach einigem Umeditieren habe ich ihn dann auch kompiliert bekommen, aber schön ist es nicht!
Jetzt zu den Fehlermeldungen:
standard. Examples include substituting the <X> header f or the <X.h> header for C++ includes, or <iostream> instead of the deprecated he ader <iostream.h>. To disable this warning use -Wno-deprecated.
Zuersteinmal sollte man das machen, was der Kompierler vorschlägt, d.h. statt z.B. iostream.h zu inkludieren lieber nur iostream.
# include <iostream.h> -> war früher, jetzt nicht mehr # include <iostream> -> ist jetzt angesagt
Das gleich gilt dann auch für <fstream>.
scanner.h:15: Fehler: ISO-C++ verbietet Deklaration von »CMAX« ohne Typ
Und auch hier hat er Recht. Die Konstanten sind ohne Typ definiert, nicht schön. Ich hab einfach überall wo er gemeckert hat, mal ein _int_ hingeschrieben.
scanner.cpp:65: Fehler: »stricmp« wurde in diesem Gültigkeitsbereich
stricmp() gibt es bei mir nicht. Ich nehme mal an, dass soll die case-insensitive Variante sein. Habe ich dann durch strcmp() ersetzt.
(Habe gerade die manpage zu strcasecmp gefunden, vielleicht ist das ja besser?)
scannerMain.cpp:6:21: Fehler: condefs.h: Datei oder Verzeichnis nicht
Dann scheinen im Code noch irgendwelche Includes zu sein, die es wohl unter Linux so nicht gibt (zumindest bei mir :), z.B condefs.h oder so... (Habe ich einfach rausgenommen).
scannerMain.cpp:20: Fehler: »cout« wurde in diesem Gültigkeitsbereich
Wenn ich mich nicht irre, sind neurdings die Sachen aus der STL auch im eigenen Namensraum (std). D.h. ein
#include <iostream>
using namespace std;
ist schon fast Pflicht, wenn man nicht ständig std::cout und dergleichen schreiben will.
Achja und dann habe ich noch in scanner.h die Definition des enum symbol in die die Klassendeklaration (public-Teil) von Scanner verschoben.
... und in scannerMain.cpp dann die Zeile
} while (S.sym != period);
auf
} while (S.sym != Scanner::period);
abgeändert.
Was mache ich falsch?
Nix! Der heruntergeladene Quellcode ist einfach Murks!!!
happy hacking ;) Marcus