Klassen in Namespaces
-
Hi, irgendwie komme ich grade nicht voran und mir fällt nix mehr zum Testen ein.
Folgendes Problem: Ich verwende Namespaces und schachtele die auch.
Darin deklariere ich Klassen, eine Klasse hat eine statische Funktion, die ich als Callback-Funktion nutzen möchte. Die Klasse wird in einer Header-Datei deklariert und die Funktionen in .cpp definiert:bla.h
namespace A { namespace B { class MainView { public: static void OpenFile( void ); }; } }bla.cpp
#include "bla.h" namespace A { namespace B { void MainView::OpenFile( void ) { /* Do something */ } } }Das funktioniert soweit auch immer wunderbar.
Nun kommt mein Callback auf diese Funktion:
DataViewer.cpp
#include "bla.h" namespace A { namespace B { /* STERNCHEN */ CallBackFunction cbf = MainView::OpenFile; } }Klappt nicht.
Packe ich die Klassendeklaration und die Definition der Funktion aus bla.cpp bei STERNCHEN rein, wird das ganze problemlos kompiliert und ausgeführt.
Es gibt zwei Fehlermeldungen:
[..]dataviewer.cpp:22: error: 'MainView' has not been declared
[..]dataviewer.cpp:22: error: 'OpenFile' was not declared in this scopeDie Headerdatei bla.h wird gefunden.
Jedenfalls meckert er, wenn etwas syntaktisch falsches drin steht.Übersehe ich irgendwas, habe ich bei den Namespaces was falsch verstanden!?
Benutzter Compiler: g++ (GCC) 4.0.3 20060104 (prerelease) (Debian 4.0.2-6)
-
Ich habe die Funktion nun verschoben und somit zwei Klassen zusammengelegt, so dass die Funktion nun wieder in der selben Datei auftaucht, wie die Zuweisung der Callback-Funktion. Zack, schon funktioniert's wieder. :-\
Das bringt mich auf eine neue Frage (die ich mangels Google-tauglicher Umschreibung hier stelle; ich habe leider auch keine brauchbare C++ Literatur hier):
Darf ich einen Namensraum nur einmalig öffnen und beschreiben, also in einer (1,0) Headerdateien und in einer CPP-Datei und werden Erweiterungen des Namendurch andere Dateien vom Compiler (ohne Fehlermeldung) ignoriert?!?
Danke für evtl. Antworten!
-
Hallo,
Xin schrieb:
Darf ich einen Namensraum nur einmalig öffnen und beschreiben, also in einer (1,0) Headerdateien und in einer CPP-Datei und werden Erweiterungen des Namendurch andere Dateien vom Compiler (ohne Fehlermeldung) ignoriert?!?
Namensräume kannst du so oft auf - und zumachen wie du willst. Und eigentlich sollte der Compiler die Erweiterungen (in der entsprechenden Datei) kennen.
Mfg
GPC
-
GPC schrieb:
Hallo,
Namensräume kannst du so oft auf - und zumachen wie du willst. Und eigentlich sollte der Compiler die Erweiterungen (in der entsprechenden Datei) kennen.
Zuerst einmal danke für die Bestätigung, war ich doch nicht ganz so unfähig.
Ansonsten bin ich immer noch offen für mögliche Ideen, um das Problem eleganter zu lösen, vielleicht sieht ja doch jemand einen Fehler in meiner Herangehensweise und sieht sich in der Lage, mich zu korrigieren? <hoff>.
Ich vermute, die Frage, ob hier ein Compilerfehler vorliegt, wird wohl unbeantwortet bleiben. :-\