Zuweisung an einen Pointer innerhalb einer Klasse ??
-
Die Klasse:
class CAHK_KostSt; //--------------------------------------------------------------------------- namespace AHK_Abrechnung { class CAHK_MietE { public: private: // Verbindungen CAHK_KostSt* m_pKostSt; public: inline void SetKostSt(CAHK_KostSt* _KostSt) { m_pKostSt = _KostSt; } }; } // namespace ::AHK_Abrechnung
Der Aufruf:
CAHK_KostSt TestObj; m_vMietE[n].SetKostSt(&TestObj);
Ich kann die Set-Methode auch weg lassen, also:
public:
CAHK_KostSt* m_pKostSt;Bei der Zuweisung einer Referenz kommt auch der selbe Fehler.
P.S.:
Der Aufruf der Set-Methode erfolgt in der Methode einer anderen Klasse,
welche einen CAHK_MietE Vektor enthält, alsoclass CAHK_MietE; class CAHK_KostSt; //--------------------------------------------------------------------------- namespace AHK_Abrechnung { class CAHK_Abrechnung { public: private: // Der besagte Vektor: vector<CAHK_MietE>m_vMietE; public: // Hier wird die Referenz gesetzt, siehe unten AHK_Return SetMietE_Ref(); }; //--------------------------------------------------------------------------- AHK_Return CAHK_Abrechnung::SetMietE_Ref() { // Referenz setzen, n ist initialisiert CAHK_KostSt TestObj; m_vMietE[n].SetKostSt(&TestObj); // ... return VR_OK; } //--------------------------------------------------------------------------- } // namespace ::AHK_Abrechnung
-
fehlt ein #include?
das .h-file wo die class CAHK_KostSt definiert ist?
-
Hi!
Ne, inkludiert wird schon korrekt, namespaces sind auch ordentlich angegeben.
Der Compiler erkennt ja auch alles und will "nur" von 'CAHK_KostSt *' nach 'CAHK_KostSt *' Konvertieren, und das geht nicht.
Ich werd nicht mehr, in einer kleinen Testumgebung mit ähnlichem Aufbau funktioniert das tadellos ??Sonst noch irgendwelche Ideen?
Ach ja, und Danke für die schnellen Antworten!
-
ajcPanther schrieb:
Sonst noch irgendwelche Ideen?
probier mal mit 'nem anderen compiler, gcc oder sowas. ich wette der meldet 'incomplete type'
-
Also im Dev-C++ (mingw) kommt der gleiche Fehler:
AHK_Abrechnung.cpp:37: cannot convert `AHK_Abrechnung::CAHK_KostSt*' to ` CAHK_KostSt*' in assignment
Ich versteh es nicht ?!
-
ajcPanther schrieb:
Also im Dev-C++ (mingw) kommt der gleiche Fehler:
AHK_Abrechnung.cpp:37: cannot convert `AHK_Abrechnung::CAHK_KostSt*' to ` CAHK_KostSt*' in assignment
dann mach doch mal alles ohne diese namespaces.
... oder ein 'using namespace AHK_Abrechnung' irgendwo davor
-
Kanst du vielleicht compilierbaren Code liefern? Dann wäre es wahrscheinlich einfacher eine Lösung zu finden.
-
Tatsache,
wenn ich den namespace komplett weglasse, funktioniert es,
woran kann das denn liegen ?Ich könnte mir vorstellen, der Compiler denkt so etwas wie:
"von 'AHK_Abrechnung::CAHK_MietE*' kann ich nicht nach 'CAHK_MietE*' konvertieren"
Das ist doch schon sehr komisch, da beide Objekte im selben namespace definiert wurden?!
Ich versuch mal, es auch mit dem namespace hinzubekommen, bzw. hat jemand
eine Ahnung wie ich das mit namespaces machen sollte?Danke für die Hilfe,
ein erleichterter ajcPanther
-
ajcPanther schrieb:
Tatsache,
wenn ich den namespace komplett weglasse, funktioniert es,
woran kann das denn liegen ?Ich könnte mir vorstellen, der Compiler denkt so etwas wie:
"von 'AHK_Abrechnung::CAHK_MietE*' kann ich nicht nach 'CAHK_MietE*' konvertieren"
Das ist doch schon sehr komisch, da beide Objekte im selben namespace definiert wurden?!
Ich versuch mal, es auch mit dem namespace hinzubekommen, bzw. hat jemand
eine Ahnung wie ich das mit namespaces machen sollte?Danke für die Hilfe,
ein erleichterter ajcPanther
Versuch mal, es voll zu qualifizieren:
inline void SetKosten(AHK_Abrechnung::CAHK_MietE* kosten);
mfg
v R
-
ajcPanther schrieb:
Ich könnte mir vorstellen, der Compiler denkt so etwas wie:
"von 'AHK_Abrechnung::CAHK_MietE*' kann ich nicht nach 'CAHK_MietE*' konvertieren"ja, glaube ich auch. wobei der mingw wenigstens eine deutliche fehlermeldung ausspuckt und nicht sowas wie das blöde borland-teil.
ajcPanther schrieb:
Ich versuch mal, es auch mit dem namespace hinzubekommen, bzw. hat jemand
eine Ahnung wie ich das mit namespaces machen sollte?kannst ja probieren, die vorwärtsdeklarationen mit in den namespace zu packen oder den namespace davorschreiben
class AHK_Abrechnung::CAHK_MietE; class AHK_Abrechnung::CAHK_KostSt;
vielleicht hilft das
-
In dem unteren Code wird die Klasse CAHK_KostSt ausserhalb des Namespaces definiert. Der Compiler kennt jetzt vermutlich zwei Klassen:
A) class ::CAHK_KostSt
class AHK_Abrechnung::CAHK_KostSt
Die inline Funktion erwartet also ::CAHK_KostSt, während der Code AHK_Abrechnung::CAHK_KostSt übergibt.
Die Forward-Deklaration von class CAHK_KostSt sollte innerhalb des Namespaces stehen.
Die Klasse:
C/C++ Code: class CAHK_KostSt; //--------------------------------------------------------------------------- namespace AHK_Abrechnung { class CAHK_MietE { public: private: // Verbindungen CAHK_KostSt* m_pKostSt; public: inline void SetKostSt(CAHK_KostSt* _KostSt) { m_pKostSt = _KostSt; } }; } // namespace ::AHK_Abrechnung
-
Boah, klasse! Danke an den Vorposter, genau so ist es. Vorwärts-Deklarationen immer innerhalb des namespace schreiben.
Na, mal wieder dazu gelernt.Danke an alle, Problem gelöst, Chef zufrieden, Tag gerettet
!
c ya, acjPanther