Probleme mit namespace

Linz Erich

Grünschnabel
Hi,
folgende Situation:
Ich habe ein Form (nenne wir es Form1) in VC++ 2005 erstellt, welches "oben" eine Menuleiste besitzt. Sie besitzt zwei Items: "Datei" und "Konfiguration". Anfangs, wenn Form1 startet ist nur Item "Datei" aktiv (Enabled = true) und Item "Konfiguration" ist inaktiv (Enabled = false). Form1 besitzt den namespace: "namespace1". Wenn ich jetzt unter der Rubrik "Datei" auf "Neu" klicke öffnet sich ein neues Form (nenne wir es Form2 mit namespace: "namespace2"). Damit das funktioniert, habe ich in der headerfile "Form1.h" geschrieben:

Form1.h:
C++:
#include "Form2.h"
[...]
namespace namespace1
{ [...]
using namespace2;
[...]
private: System::Void toolStripMenuItem_Neu_Click(System::Object*  sender, System::EventArgs*  e)
{
    Form* form_object = new Form2Form();
    form_object->Show();
}
}

Das funktioniert soweit... :)

Nun soll aber, wenn ich das Form2 mit dem Button "OK" schließe, der Item "Konfiguration" aus Form1 aktiviert werden. Dazu hab ich in "Form2.h" geschrieben:

Form2.h:
C++:
#include "Form1.h"

namespace namespace2
{
     using namespace1;
[...]
private: System::Void button_OK_Click(System::Object*  sender, System::EventArgs*  e) { [...]
    this->Close();
    this->toolStripMenuItem_Konfiguration->Enabled = true;
}
}

Beim Kompilieren bekomme ich als Fehlermeldung:
Form2.h: "error C2871: 'namespace1': Es ist kein Namespace mit diesem Namen vorhanden"
Form2.h: "error C2039: 'toolStripMenuItem_Konfiguration': Ist kein Element von 'namespace2::Form2Form'"
Form2.h: "error C2227: Links von "->Enabled" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden."
Form2.h: "Siehe Deklaration von 'namespace2::Form2Form'"

Frage:
Was mache ich falsch?
Warum erkennt er namespace1 nicht, obwohl ich doch geschrieben habe: "using namespace1" ?

Ich wär über für jegliche Hilfe echt dankbar...

Gruß Linzer
 
Zuletzt bearbeitet von einem Moderator:
Hi,
folgende Situation:
Ich habe ein Form (nenne wir es Form1) in VC++ 2005 erstellt, welches "oben" eine Menuleiste besitzt. Sie besitzt zwei Items: "Datei" und "Konfiguration". Anfangs, wenn Form1 startet ist nur Item "Datei" aktiv (Enabled = true) und Item "Konfiguration" ist inaktiv (Enabled = false). Form1 besitzt den namespace: "namespace1". Wenn ich jetzt unter der Rubrik "Datei" auf "Neu" klicke öffnet sich ein neues Form (nenne wir es Form2 mit namespace: "namespace2"). Damit das funktioniert, habe ich in der headerfile "Form1.h" geschrieben:

Form1.h:
PHP:
#include "Form2.h"
[...]
namespace namespace1
{ [...]
using namespace2;
[...]
private: System::Void toolStripMenuItem_Neu_Click(System::Object*  sender, System::EventArgs*  e)
{
    Form* form_object = new Form2Form();
    form_object->Show();
}
}
Das funktioniert soweit... :)

Nun soll aber, wenn ich das Form2 mit dem Button "OK" schließe, der Item "Konfiguration" aus Form1 aktiviert werden. Dazu hab ich in "Form2.h" geschrieben:

Form2.h:
PHP:
#include "Form1.h"

namespace namespace2
{
     using namespace1;
[...]
private: System::Void button_OK_Click(System::Object*  sender, System::EventArgs*  e) { [...]
    this->Close();
    this->toolStripMenuItem_Konfiguration->Enabled = true;
}
}
Beim Kompilieren bekomme ich als Fehlermeldung:
Form2.h: "error C2871: 'namespace1': Es ist kein Namespace mit diesem Namen vorhanden"
Form2.h: "error C2039: 'toolStripMenuItem_Konfiguration': Ist kein Element von 'namespace2::Form2Form'"
Form2.h: "error C2227: Links von "->Enabled" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden."
Form2.h: "Siehe Deklaration von 'namespace2::Form2Form'"

Frage:
Was mache ich falsch?
Warum erkennt er namespace1 nicht, obwohl ich doch geschrieben habe: "using namespace1" ?

Ich wär über für jegliche Hilfe echt dankbar...

Gruß Linzer

In Form1.h wird sofort Form2.h includiert und dort sich auf den noch nicht definiertern Namespace "namespace1" bezogen.
Ist wohl besser Du machst den include auf Form2.h erst nach der Definition von Deinem Namespace "namespace1".
Es ist allgemein keine allzu gute Sache wenn sich Header gegenseitig includieren...

Gruß
 
Danke für die schnelle Antwort... aber das funktioniert leider auch nicht. Ich kann mir vorstellen, dass es nicht gut ist, wenn man zwei headerfiles derart miteinander "verwurschtelt" ;) Ich hab jetzt auch etwas besser verstanden wo das Problem liegt, hab aber keinen Lösungsansatz... :confused: :mad:

Aber es muss doch möglich sein, dass zwei Forms uneingeschränkt miteinander kommunizieren können, oder etwa nicht?
Falls jemand eine Möglichkeit weiß, würd ich mich freuen, wenn er sie hier vorstellt...

Danke schon mal.
Gruß, Linzer
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück