Klasse will Datentyp nicht erkennen, steh etwas aufm Schlauch
-
Hi,
#pragma once #include "stdafx.h" //Digit.h ist in stdafx.h eingebunden! class Display { public: Display(int x, int y, int farbe, char *string);//Konstruktor ~Display(void);//Destruktor void Convert(char *string);//Konvertiert einen String in Ganzzahlen und übergibt diese an Variablen void Einschalten(); //Schaltet das Dispaly ein void Ausschalten();//Schaltet das Display aus private: char str[9]; //String dem eine Zahl als Text übergeben wird int x,y; // Koordinaten int a,b,c,d,e,f,g,h; //Variablen für konvertierte Zahlen aus dem String int farbe; //Farbe Digit *disp[8]; //Pointer auf ein Array aus 8*Digit };Das Projekt ist ein 8-Stelliges Display aus 7-Segment-Digits zu erstellen. Die Klasse Segment, die ein Zeichen an einer beliebigen Stelle darstellen kann funktioniert. Die Klasse Digit die aus sieben Objekten von Segment eine Zahl von 0-15 (Hexadezimal) darstellen kann funktioniert auch.
Jetzt möchte ich obige Klasse erstellen, aber es hat den Anschein, dass er mir "Digit" in Zeile 18 nicht als Datentyp erkennt, obwohl ich die Digit.h in mittels "stdafx.h" eingebunden habe.
Folgend der Fehlercode den mir der Compiler ausspuckt:
------ Erstellen gestartet: Projekt: Digiuhr, Konfiguration: Debug Win32 ------
Kompilieren...
Digit.cpp
c:\sop\cpp\digiuhr\digiuhr\display.h(18) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
c:\sop\cpp\digiuhr\digiuhr\display.h(18) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
c:\sop\cpp\digiuhr\digiuhr\display.h(18) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
Digiuhr.cpp
c:\sop\cpp\digiuhr\digiuhr\digiuhr.cpp(20) : warning C4996: 'ctime' wurde als veraltet deklariert
c:\programme\microsoft visual studio 8\vc\include\time.inl(88): Siehe Deklaration von 'ctime'
Meldung: "This function or variable may be unsafe. Consider using ctime_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."
c:\sop\cpp\digiuhr\digiuhr\digiuhr.cpp(102) : warning C4996: '_sleep' wurde als veraltet deklariert
c:\programme\microsoft visual studio 8\vc\include\stdlib.h(796): Siehe Deklaration von '_sleep'
Meldung: "This function or variable has been superceded by newer library or operating system functionality. Consider usingSleepinstead. See online help for details."
Display.cpp
c:\sop\cpp\digiuhr\digiuhr\display.cpp(8) : warning C4996: 'strcpy' wurde als veraltet deklariert
c:\programme\microsoft visual studio 8\vc\include\string.h(73): Siehe Deklaration von 'strcpy'
Meldung: "This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."
Segment.cpp
stdafx.cpp
Code wird generiert...
Das Buildprotokoll wurde unter "file://c:\SOP\cpp\Digiuhr\Digiuhr\Debug\BuildLog.htm" gespeichert.
Digiuhr - 3 Fehler, 3 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========Ich benutze Visual Studio 2005 Professional und WindowsXP. Kann einfach keinen Fehler finden... vielleicht bin ich auch einfach nur blind

Vielen Dank schonmal für die Hilfe!
Gruß
Markus
-
Probier mal mit forwar Decleration.
.. class Digit; class Display { } ..
-
Danke! Funktioniert. Wenn Du mir jetzt noch erklären könntest was das ist und warum es nicht funktioniert wenn ich die Digit.h inkludiere, wäre ich Dir sehr verbunden...

-
Das ist so, weil er die Klasse Digit nicht gefunden hat. Mit dem forward Decleration sagst du ihm, dass irgendwan die Dekleration noch kommen wird. Und er ist zufrieden.

-
Hmmm, aber checkt der Compiler nicht erst die stdafx.h und schaut was da so alles drin ist? Falls ja, müsste er doch dort die Digit-Klasse gefunden haben.
-
Je nach physischer Struktur.
Ich nehme jetzt mal an, dass du in der main das ebenfalls inkludierst. Und jetzt geht der Compiler hin in die stdafx.h und lädt dort die header und jetzt nehme ich mal an, dass dort die "displa.h", oder wie auch immer die heisst VOR der "digit.h" steht. (Also wo die jeweiligen Klassen definiert sind)
Und dann weiss er ja noch nicht, ob es die Klasse Digit überhaupt gibt. Wenn nein gibt er dir einen Fehler aus. Du kannst das aber umgehen indem du ihm sagst, dass so eine Klasse noch kommt, aber ihn die Dekleration nicht zu interessieren hat. (Geht afaik nur mit Zeigern).