Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

26.01.2015, 20:56

[C++] Zwei Namespaces, zwei Klassen

Hallo Leute,

ich habe ein kleines Problem mit den Namespaces in meinem Projekt, wo ich jetzt mal nachfragen will.

Ich habe zwei Klassen Forum: Eine im namespace db::forum und eine in keinem namespace, bzw. zu Testzwecken im namespace web. Beide Dateien liegen auch in unterschiedlichen Ordnern.
Nun benötige ich in der Klasse web::forum eine Objekt der Klasse db::forum::Forum. Dazu inkludiere ich <db/forum/Forum.h> und versuche, ein Objekt mittels db::forum::Forum f; zu erstellen.
Versuche ich das ganze zu kompilieren kommt der Fehler: "src/forum/Forum.cpp:34:5: error: ‘Forum’ is not a member of ‘db::forum’"

Ist es nicht möglich, zwei gleich-heißende Klassen in unterschiedlichen namespaces zu handlen?

MfG Kyle

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

26.01.2015, 21:18

Ja das geht, dafür sind sie ja auch gedacht.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
namespace first{
  class A{};
};

namespace second{
  class A{};
};

first::A a();
second::A b();

3

26.01.2015, 21:49

Ja gehts immer noch, wenn ich in der Klasse second::A die Klasse first::A mit einbinde und da das Objekt erzeuge? Genau da kommt bei mir nämlich der Fehler. Wenn ich sie beide so einbinde wie du grad, dann gehts bei mir ja auch.

4

26.01.2015, 23:32

Zeig mal ein minimales Beispiel deiner Dateien, bei dem es nicht funktioniert. Es sollte auf jeden Fall funktionieren, es wird nur irgend eine Kleinigkeit falsch sein.
Lieber dumm fragen, als dumm bleiben!

5

27.01.2015, 09:55

In Datei forum/Forum.h

C-/C++-Quelltext

1
2
3
#ifndef FORUM_H#define  FORUM_H
namespace forum {  class Forum {     };}
#endif  /* FORUM_H */



In Datei web/Forum.h

C-/C++-Quelltext

1
2
3
4
#ifndef FORUM_H#define  FORUM_H#include "../forum/Forum.h"
namespace web {    class Forum {    public:        Forum() {            forum::Forum f;        }    };}

#endif  /* FORUM_H */



Auftretender Fehler:

Quellcode

1
web/Forum.h:16:13: error: ‘forum’ has not been declared             forum::Forum f;             ^web/Forum.h:16:26: error: expected ‘;’ before ‘f’


PS: Tut mir Leid, ich weiß nicht was ich falsch mach, nur wenn ich mir die Vorschau anschau haut der mir die ganzen newlines raus, sodass das jetzt so komisch formatiert ist :S

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

27.01.2015, 09:58

Sollte es nicht db::forum::Forum heißen? Das hast Du doch oben behauptet. Schon allein beide Klassen Forum zu nennen ist aber eigentlich ganz furchtbar verwirrend.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

7

27.01.2015, 10:23

Zwei verschieden Header müssen verschiedene Include-Guard-Defines benutzen.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

8

27.01.2015, 10:37

Sollte es nicht db::forum::Forum heißen? Das hast Du doch oben behauptet. Schon allein beide Klassen Forum zu nennen ist aber eigentlich ganz furchtbar verwirrend.
Ja ich hab ein kleines Beispiel zusammengebastelt, wo der selbe Fehler auftritt und nicht den eigentlichen Code hergenommen.
Zwei verschieden Header müssen verschiedene Include-Guard-Defines benutzen.
Juhu vielen Dank, das war der Fehler :D

9

27.01.2015, 13:02

Nimm #pragma once, dann hast du den Stress nicht.

MfG
Check

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

10

28.01.2015, 09:36

Muss man 2 x eine Klasse mit dem Namen Forum haben? Ein Forum ist doch ein Forum oder nicht?

Werbeanzeige