Anonymer Namesoace
-
Ich möchte gerne eine Klasse in einer .cpp Datei verstecken. Um diese zu benutzen arbeite ich mit einer Vorwärtsdeklaration. Siehe folgendes Beispiel:
#ifndef FORWARD_H #define FORWARD_H class apfel; class mensch { public: void essen(); private: apfel* obst; }; int main() { mensch ich; ich.essen(); return 0; } #endif#include "forward.h" #include <iostream> namespace { class apfel { public: void abbeissen(); }; void apfel::abbeissen() { std::cout << "Der Mensch hat vom Apfel abgebissen! " << std::endl; } } // namespace void mensch::essen() { obst = new apfel; obst->abbeissen(); }ich bekomme folgende Fehlermeldung:
*error C2872: 'apfel' : Mehrdeutiges Symbol
error C2512: 'apfel' : Kein geeigneter Standardkonstruktor verfuegbar
error C2027: Verwendung des undefinierten Typs "apfel"
*
Was habe ich falsch gemacht und wie kann ich das korregieren?
Das ist nur ein Beispiel, welches ich vom Prinziep her so benutzen muss.
Also Klasse verstecken und durch Vorwärtsdeklaration bekannt machen.Danke und Gruß!
-
es geht nich die klasse apfel ist nicht die gleiche klasse wie <anon_namepsace_of_foofile>::apfel
-
den anonymen namespace wegtun. die vorwärtsdeklaration von "apfel" ist ja auch nicht in einem drin.
und spätestens in "main", wo du eine memberfunktion von apfel aufrufst, brauchst du die vollständige definition der klasse. wenn du die implementation von "apfel" verstecken willt, google mal nach "pimpl idiom"
/edit. ups, du rufst in main ja gar keine funktion von apfel auf. also dann ist die lösung einfach: anonymen namespace weglassen und nach pimpl googeln.
-
r0nny schrieb:
es geht nich die klasse apfel ist nicht die gleiche klasse wie <anon_namepsace_of_foofile>::apfel
Danke aber: ....und wie kann ich das korregieren?
-
Wie queer_boy schon sagte, lass den anonymen Namespace weg.
-
Schon geschehen, DANKE!