Aus einer Klasse X, Funktionen der Klasse Y aufrufen?
-
Hallo zusammen,
ich habe zwei Klassen CX und CY.
Die Klsse CX hat eine Public Methode BYTE GetValue();. Diese möchte ich aus der Klasse CY aufrufen.Hier ist der Code:
Main:
#include "Y.h" #include "X.h" CY Cy; CX Cx; void main() { Cy.test(); return 0; }Y.h
#ifndef __Y_H__ #define __Y_H__ // include once only ... #include "X.h" class CY { // Memberfunctions public: void test(); private: protected: }; #endifX.h
#ifndef __X_H__ #define __X_H__ // include once only ... #include "Y.h" class CX { // Memberfunctions public: BYTE GetValue(); private: protected: }; #endifY.cpp
void CY::test() { BYTE temp; temp=Cx.GetValue(); }X.cpp
BYTE CX::GetValue() { return 4; }Dieses Programm ergibt zwar keinen Sinn, erklärt aber mein Problem. Bei mir erscheint dann die Fehlermeldung: Cx undeclared identifier.
Der Konstruktor und Destruktor sind mit absicht weggelassen worden.Wie geht es Richtig? Cx ist doch global verfügbar gemacht worden in der Main.
Gruß spacehelix
-
Hallo
#include "Y.h" #include "X.h" CY Cy; // Hier brauchst du nur Cy zu dekalrieren void main() { Cy.test(); return 0; }Y.h
#ifndef __Y_H__ #define __Y_H__ // include once only ... class CY { // Memberfunctions public: void test(); private: protected: }; #endifX.h
#ifndef __X_H__ #define __X_H__ // include once only ... extern CX Cx; // Hier must du Cx deklarieren class CX { // Memberfunctions public: BYTE GetValue(); private: protected: }; #endifY.cpp
#include "X.h" // Hier must du CX includen void CY::test() { BYTE temp; temp=Cx.GetValue(); }X.cpp
CX cx; // Hier must du Cx implementieren und initialisieren BYTE CX::GetValue() { return 4; }Allerdings sind globale Variablen nicht gut, nimm lieber Übergabe-Parameter
/Edit : Includes korrigiert.
bis bald
akari
-
Du darfst nicht gegenseitig die Dateien "x.h" und "y.h" in den Headerdateien einbinden. Such mal nach dem Begriff "Vorwärtsdeklaration" (forward declaration).
@akari: das kommt davon, wenn man Code ungetestet übernimmt... (aber bei diesem einfachen Code sind die includes sowieso überflüssig).
-
Hi
Danke für die Hilfe. Es funktioniert jetzt.