error C2143: Syntaxfehler: Es fehlt ';' vor '*'



  • hat sich erledigt



  • Robel schrieb:

    wenn ich die 2. zeile auskommentiere dann gibt er mir die gleiche fehlermeldung, also denke ich mal er included die XRTable.h erst garnicht ­čśĽ

    Ich glaube eher das deine XRTable falsch ist. Includieren tut er es n├Ąmlich (sonst w├╝rde er schreiben das die Datei "XRTable.h" nicht gefunden werden konnte. Und wenn XRTable nicht richtig definiert ist, kann der Fehler gleich sein:

    XRTable * table; // ISO C++ forbids declaration of ÔÇśXRTableÔÇÖ with no type

    XRTable ist schlicht und ergreifend undefiniert.

    Der Fehler "Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterst├╝tzt." deutet auf ein anderes Problem. Irgendwo wurde eine Typangabe oder ein R├╝ckgabewert nicht angegeben.

    So schauen wir uns mal Ausnahmsweise deine Dateien an. Erstens bitte .ncb nicht mit kopieren, die geh├Âren definitiv nicht in ein zip.

    So erstmal ein erstes Fazit:

    • Warnstufe bitte auf 4 erh├Âhen (In den Projekteinstellungen; C++/Allgemein/Warnstufe...)
    • Einheitliche und SPRECHENDE Namen verwenden (Nicht mal Klassen gro├č, dann klein schreiben; Sichtbare unterschiede zwischen Variablennamen und Konstanten helfen auch das Lesen zu erleichtern)
    • NIEMALS "using namespace" im Header
    • "system("pause")" sollte man nicht verwenden (Schau mal bitte in die Konsolen-FAQ
    • Dein Code ist zu gro├č um ihn einfach mal zu analysieren. Immer den Code vorher so weit wie m├Âglich auf das wesentliche verkleinern (Manchmal findet man so auch den Fehler)
    • Klassen die nicht zur Ableitung gedacht sind brauchen sollten auch nicht zum Ableiten verleiten (lieber im Regelfall alles private statt protected machen, es sei den du willst diese Klasse definitiv als Basisklasse verwenden; dann sollte sie aber auch einen virtuellen Destruktor besitzen).
    • Sofern dein Prof nicht darauf besteht w├╝rde ich (void) durch () ersetzen.
    • Nur das im Header inkludieren was wirklich notwendig dort ben├Âtigt wird (den Rest kann man immer noch im Source einbinden)
    • Es ist eine Unsitte Parameter unbenannt im Header stehen zu lassen, der Header ist es den man liest um einen ├ťberblick zu bekommen (Ja, verboten ist das weglassen nicht, aber es ist auch kein guter Stil)
    • Du arbeitest gerne mit Zeigern, wo auch Referenzen reichen w├╝rden, oder? Ob du nun einen Zeiger auf ein internes Datenelement oder eine Referenz zur├╝ckgibst ist egal, dann sollte man aber lieber der Syntax wegen Referenzen nehmen.
    • Der Begriff Initialisierungsliste (Konstruktor) sagt dir etwas? Zumal es eigentlich ├╝blich ist dort aus konstistenzgr├╝nden alle Variablen in ihrer Deklarationsreihenfolge aufzuf├╝hren (und sei es mit dem aufruf des Standardkonstruktors). So ist sicher gestellt das auch wirklich keine Variable in der Initialisierung vergessen wurde.
    • F├╝r die Methode "string TokenReader::GetToken(void)" geh├Ârt man geschlagen. Und du meinst sicher das du eine so lange Methode ├╝berblicken kannst? Lieber in kleinere ├╝berschaubare private Methoden umwandeln.
    • Parameter die nicht zu den integralen Basistypen (wie int, float...) geh├Âren sollten immer als konstante Referenz ├╝bergeben werden, oder Alternativ als Referenz wenn sie Bearbeitet werden sollen.
    • C++ hat keinen Garbage Collector, wenn du schon mit Zeigern und Allozierungen um dich schmeist, so musst du dich auch um das Aufr├Ąumen selber k├╝mmern!

    Und das hier meinst du hoffentlich nicht ernst:

    PDFObj* arrayObj::getObj(unsigned int)
    {
        PDFObj* obj;
        return obj;
    }
    

    1. Unitialisierter Pointer der irgendwo in den Speicher zeigen kann (noch nicht mal mit 0 initialisiert)
    2. ├ťbergabeparameter der nicht verwendet wird, und wo auch kein Name darauf deutet was er machen soll (und sei es das der Name in C-Komentaren eingeschlossen ist).
    3. Wer soll sich hierbei eigentlich um die Allozierung und Deallozierung k├╝mmern?

    class PDFObj
    {
    public:
        PDFObj(void);
    public:
        ~PDFObj(void);
    };
    

    Dies ist KEINE Basisklasse. Wenn bitte mit virtuellen Destruktor arbeiten, wobei mir eh das Verst├Ąndnis fehlt wozu man eine Basisklasse verwendet, wenn diese keine virtuellen Methoden bereitstellt.

    Letzter nachtrag: Den Code werde ich erstmal nicht weiter analysieren... Habe noch besseres mit meinen Sonntag vor.

    cu Andr├ę
    P.S: M├╝ssen es immer Zeiger sein, bist du so masochistisch veranlagt das du sie ├╝berall einsetzt? ;p



  • so erstmal danke f├╝r die antwort.

    naja das die XRTable falsch ist, ist eher unwahrscheinlich weil ich in der main.cpp ja ein XRTable objekt erzeuge und es auch benutze.
    das kannst du ganz einfach testen in dem du die zeile "XRTable * table;" in indirectRef.h einfach auskommentierst oder du kannst in die indirectRef.cpp einfach mal folgendes schreiben:

    #include "indirectRef.h"
    
    indirectRef::indirectRef()
    {
    	XRTable * tab;
    }
    ...
    

    daf├╝r kommt keine fehlermeldung also m├╝sste der Fehler doch irgendwo in der indirectRef.h sein, oder?



  • Robel schrieb:

    ....also m├╝sste der Fehler doch irgendwo in der indirectRef.h sein, oder?

    Leider werden Fehler bei C++ nicht immer da angezeigt wo sie wirklich auftreten. Und der XRTable wird includiert, aber er kann nichts damit anfangen (Der Typ wird nicht erkannt). Daher meckert er ├╝ber XRTable unabh├Ąngig davon ob du den Header inkludierst oder nicht (und es wird mit hoher Sicherheit die gleiche Fehlermeldung sein).

    Es kann schon sein das du am Ende einer Klasse ein Semikolon vergessen hast, oder irgendwo ein { oder } zuviel. Aber dein Code ist weder sauber genug um ihn mal eben schnell durchzuschauen noch kurz genug. Durch die schlechte Namensgebung kommt man dann auch noch zus├Ątzlich ins Stolpern, und ich wollte Heute noch was anderes als Korrigieren machen ­čśë

    cu Andr├ę



  • Vielleicht hat auch nur die XRTable.h deinen Header eingebunden - und dank Include-Guards und der Verarbeitungsreihenfolge des Pr├Ąprozessors steht die Definition von XRTable jetzt hinter der Definition von indirectRef.



  • Wenn du eh nur einen Pointer auf die Klasse dort hast und sie sonst im Header nicht verwendest, kannst du zur Not auch mit class XRTable; am Anfang der Datei dem Compiler vermitteln was er da eigentlich vor sich hat. Dann brauchst auch nicht inkludieren (im Header).



  • ne kein plan, nach dem ich dein code angeschaut habe


Log in to reply