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 werden 🙂

    Dies 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


Anmelden zum Antworten