Was habe ich hier falsch gemacht ?
-
Hi,
der Compiler gibt mir "declaration syntax error".
für die Zeile "class PitbullyIOBuffer" und ich weiss nicht wieso ?
Ich gebe zu, das ich ein Problem mit der Structur habe und dort vermutlich auch der Fehler ist. Aus meinen C-Zeiten hatte ich bis jetzt keine Probleme mit Strukturen, doch in Verbindung mit einer Class scheint es nicht sehr rund zu laufen.
Gruss
typedef struct tag_IOElement IOElement; struct tag_IOElement { char I2CAdresse; // I2C Adresse 0=Memory Var char Enabled; // Ist diese Variable aktiv char Locked; // Ist eine Sperre auf diese Var. char Name[10]; // Name der Variable long InitValue; // Startwert der Variable char ScanRate; // Abtastrate in 100 milli Sek. long Value; // Aktueller Wert float LastScan; // mSek. seit dem letzten Scan char Type; // Datentyp 0=Byte 1=Word 2=Long char UpdateRequest; // Wert neu einlesen char IOAddress; // I/O Adresse des I2C Slave char ValueChanged; // Mitteilung, das Wert geändert hat long NextWriteValue; // Schreibwert beim naechsten Zyk. IOElement *LastElement; // Vorheriges Element in der Liste IOElement *NextElement; // Zeiger auf das naechste Element }; // ---------------------------------------------------------------------------- // Interface des IO Buffer Objektes // ---------------------------------------------------------------------------- class PitbullyIOBuffer { private: // Siehe jede Instanz nur IOElement *ActualElement; // Actives Element der Instanz protected: // Sehen alle Instanzen gleich int AnzahlDerInstanzen; // Anzahl der Objekte IOElement *MainListe; // HauptListe public: PitbullyIOBuffer(void); // Konstruktor ~PitbullyIOBuffer(void); // Destruktor void SetVariableName(char*); // Setze den Namen der Var. char* GetVariableName(void); // Ermittle den Variblen Name // Setze/frage nach Eigenschaften der Verbindung void SetEnableStatus(char); // Freigabe der Var. steuern int SetLockStatus(char); // Sperrung der Var. setzen int IsEabled(void); // Ist die Variable freigegeben int IsLocked(void); // Ist die Variable gesperrt int IsNew(void); // Hat sich der Wert geaendert // Informationsfelder fuer die Erstellung einer Verbindung void SetScanRate(char); // Scanrate festlegen void SetI2CAdress(char); // Setze die aktive I2C Adresse void SetIOAdress(char); // Zieladresse des Slave void SetInitValue(long); // Basis Wert, bis eingelesen void AddItem(void); // Fuege eine neues Element hinzu void RemoveItem(void); // Entfernt einen Block // Memberroutinen, welche Übertragungsfunktionen ausführen void DoEvent(void); // Ausstehende Events durchführen. long GetValue(void); // Wert ermitteln long SetValue(void); // Wert setzen };
-
typedef struct tag_IOElement IOElement;
Bis zu dieser Zeile, ist tag_IOElement nirgendwo deklariert?
struct tag_IOElement; typedef tag_IOElement IOElement;
Gibt es einen Grund, weshalb du die Struktur nicht gleich IOElement nennst?
-
Shlo schrieb:
typedef struct tag_IOElement IOElement;
Bis zu dieser Zeile, ist tag_IOElement nirgendwo deklariert?
Doch, an dieser Stelle
Das 'struct tag_IOElement' dort drin fungiert als Vorausdeklaration.
Ich tippe mal ins Blaue, dass hier aus Versehen ein C-Compiler zum Einsatz kommt, der mit class schlicht und einfach nichts anfangen kann ...
-
Hi,
also ich verwende einen alten Borland C++ (5.02) Compiler, da ich ein Programm für einen 80186 Prozessor schreibe (Beck-Chip).
Soll ein Robby werdenDies ist eigentlich ein C++ Compiler.
Der Editor erkennt das Schluesselwort ohne Probleme.Gruss
-
Bashar schrieb:
Doch, an dieser Stelle
Das 'struct tag_IOElement' dort drin fungiert als Vorausdeklaration.
Uhhm, wo ist der schäm-Smiley
-
Ritchie schrieb:
Dies ist eigentlich ein C++ Compiler.
Der Editor erkennt das Schluesselwort ohne Probleme.Hast du das File als .cpp oder als .c abgespeichert?
-
Hallo Bashar,
hmm.
Folgendes. Ich habe ein Hauptprogramm, welches noch eine .C File ist.
In diesem Programm habe ich einerseits versucht die Klasse einzubinden und jetzt wo Du mir diese Frage stellt, ahne ich schon woran es liegen könnte (wissen aber nicht).Bei dem Einbinden der Klasse in das Hauptprogramm habe ich nämlich auch noch Probleme, da aber noch in der Klassendefinition selber ein Fehler ist, habe ich dieses Problem ignoriert.
Die Klasse selber ist als .CPP abgelegt (Implementation) und das Interface habe ich in einer .H Datei abgelegt. Ich hoffe das dies so richtig ist.
Kann es sein, das wenn das Hauptprogramm ".C" ist, der Rest auch automatisch als normales C Programm angesehen wird ?
Wieso meldet der Compiler mir das nicht ?
Gruss
-
warum sollte er es melden?
woher soll er wissen, daß du c++ code compilieren willst?
so long
-
Hallo Elise,
Nun ja, das kann er wirklich nicht wissen.
Aber er sieht ja, das ich C++ Code in einem C Programm verwendet.
Da könnte ja eine Meldung kommen, wie "Incorrect use of Key word, using c++ key word inside of a c program"
oder so ..
Für einen Anfänger ist die Meldung ""declaration syntax error" nicht sehr hilfreich.
Der Compiler hat ja den Rest der Klasse ebenso den eigentlichen Code, welche mit einer Menge C++ Eigenheiten gefüllt war ohne Probleme übersetzt.
Wie auch immer:
Es war wohl schon immer so, das win C-Compiler einen Fehler an einer Zeile gemeldet hat, wo der Fehler eigentlich nicht war. Sondern meist ein paar Zeilen vorher.
Dies scheint sich wohl ein den Jahren nicht geändert zu haben.Viele Grüße