Problem mit Klassendefinition
-
hab ich mir auch immer gedacht, nur dann funktionierst nicht, warum auch immer es sind nur 2 Header eingebunden, die eigene und dann noch eine mit globalen Definitionen usw.
mfg
Tom
-
Schau dir mal die Include-Guards an, vielleicht sind die in den beiden Headerdateien ja gleich.
-
was genau meinst du mit Include Guards?
mfg
Tom
-
Die Dinger hier
/ Include-Guards #ifndef PYRAMIDGROUP_H #define PYRAMIDGROUP_H
-
achso, nein, ist nicht der Fall
mfg
Tom
-
Heiteres Fehlerraten.

Poste doch mal den anderen Header mit den global Defs
-
.cpp, wie sie funktioniert:
#include "control.h" #include "SolarPyramid.h".h:
#ifndef SolarPyramidH #define SolarPyramidH
-
Vielleicht fehlt ja auch nur irgendwo ein abschließendes Semikolon nach einer Klassen- / Strukturdeklaration. Oder ähnliches.
-
nö hab alles aus der Klasse rausgenommen und damit ich so zeugs nicht übersehen kann, wenn ich die Header wieder vertausch gehts nicht mehr, so gehts aber.
mfg
Tom
-
Wenn es nicht zu groß wird, kannst du ja die beiden Headerdateien mal posten sonst wird das hier nur ein weiteres Raten.
-
#ifndef SolarPyramidH #define SolarPyramidH #include <vcl.h> #include <fstream.h> #include "sensor.h" #include "SensorAnalog.h" #include "ZahlerEnergy.h" #include "Actuators.h" #include "DataStore.h" #include "filenames.h" #include "GraphStore.h" class TGroupedPyramidSystem { public: TPyramidSystem* PyramidSystem[PYRAMID_NUMBER_OF]; int FirstValid(void); int PreviousValid(int iShown); int NextValid(int iShown); int LastValid(void); int Number(void); bool IsConnected(void); public: TGroupedPyramidSystem(void); ~TGroupedPyramidSystem(void); void BackgroundAllocations(void); void WriteNameList(void); void RelaysOnHand(void); void LookForWizardDigitalEingange(void); void LookForWizardRelays(void); void LookForWizardSMT(void); void LookForWizardPT1000(void); void LookForWizardDataStorage(void); void LookForWizardAnalog(void); void AnalogBelegung(int,int,char*); void RelayBelegung(int,int,char*); void SensorBelegung(int,int,char*); void PT1000Belegung(int,int,char*); void InputBelegung(int,int,char*); void WriteSetupToFile(void); void Report(ofstream&); void Report(char*); void Control(void); void ForceToMode(int iMode,int iHoure=0); void DisableAllControlComponents(void); void DeleteAllControlComponents(void); };mfg
Tom
-
Hallo,
Bist du dir sicher, dass du diese ganzen anderen Headerdateien da drin brauchst? Versuche bitte das Einbinden von Headern in andere Header zu vermeiden. Viele Abhängigkeiten lassen sich durch Vorwärtsdeklarationen lösen. Das erhöht meist auch die Compilegeschwindigkeit. Schmeiss auf jedem Fall die fstream.h da raus. Die brauchst du da mit Sicherheit nicht. Wenn überhaupt, dann sollte man sowieso nur fstream (ohne .h) einbinden.
Die ganzen void in den parameterlosen Funktionen können auch weg. Das ist zwar kein Fehler, erschwert aber die Lesbarkeit.