Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » namespaces

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.01.2007, 22:34 Uhr
~MainBrain
Gast


Hallo,

ich bitte vielmals um Verzeihung für das "Test" posting. War ein Versehen.
Hoffe das meine Frage trozdem Beachtung findet:

Ich möchte einen Namespace erstellen der vergleichbar wie "std::cout" ein Objekt bereitstellt.
"ns::left" in meinem Fall.

Unten ist ein Excerpt aus dem Quellcode. Das Problem wird in main.cpp deutlich.

Datei: a.h

C++:
namespace ns {
class Arm
{  
public:
  String caption;  
};

extern Arm left;

};




Datei a.cpp

C++:
#include "a.h
namespace ns {
  Arm left;  
}



Datei: main.cpp

C++:
#include "a.h"

using namespace ns;
void main(void) {
  // using ns::left;  // aufruf funktioniert nur wenn ich diese zeile auskommentiere
  left.caption = "hallo";
}





Grüße,
MainBrain


Bearbeitung von 0xdeadbeef:

cpp-tag gefixt (} != ])


Dieser Post wurde am 26.01.2007 um 01:07 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.01.2007, 01:10 Uhr
0xdeadbeef
Gott
(Operator)


ns::left ist ja auch kein namespace, sondern eine Variable. Was geht, ist

C++:
using ns::left;


...wenn du nur left aus ns benutzen willst, nicht aber den gesamten namespace. Zum Beispiel...

C++:
#include <iostream>

using std::cout;

int main() { // btw, main ist immer int
  int x;

  cout << "Hello, world!\n"; // geht
  cin >> x; // geht nicht, ::cin ist nicht definiert  

  // return 0; ist in C++ in main nicht zwingend erforderlich, per default wird 0 zurückgegeben.
  // Das funzt aber nicht in anderen int-Funktionen, main ist da ein Sonderfall.
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.01.2007, 02:01 Uhr
~MainBrain
Gast


Ja.

Ich möchte das gleiche Verhalten wie "std::cout".

Wenn man "using namespace std;" schreibt, kann man "cout" verwenden ohne explizite Namensbereichsangabe.

Bei meinem namespace(ns) geht das nicht. Warum?




Danke,
MainBrain
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.01.2007, 13:55 Uhr
RHBaum



klar geht das, sollte man nur nicht machen, also zumindest das mit dem using :-) Gewoehn dir das ned an, und hoer zumindest auf 0xdeadbeef

cout ist ne globale variable (oder function? ) vom typ std::basic_ostream<char>, welches den schreibenden zugirff auf die Standardausgabe gibt. (siehe stdin unter c )

Um sowas zu bauen, braeuchtest ne globale variable im Namespace ns. Das koenntest dann genau so verwenden.

Ciao ....

Dieser Post wurde am 26.01.2007 um 13:59 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.01.2007, 15:13 Uhr
0xdeadbeef
Gott
(Operator)


Das geht doch, halt

C++:
using namespace ns;



Ansonsten, es spricht im Grunde nichts gegen die Verwendung von using, zumindest nicht in Source-Dateien. In Header-Dateien ist das natürlich tödlich, weil es den globalen namespace pollutet.

Man mag es als guten Stil bezeichnen, using-Direktiven lokal zu halten, also

C++:
void foo() {
  using namespace ns;
}


statt

C++:
using namespace ns;

void foo() { }


Aber beides ist nicht wirklich schlimm (es sei denn, es taucht in Headern auf, duh).

Was ich ganz gerne mache, ist, namespace-aliases zu benutzen. Das sieht dann z.B. so aus:

C++:
namespace unglaublich_langer_und_daemlicher_namespace_name {
  int x = 0;
}

// ...

namespace kurz = unglaublich_langer_und_daemlicher_namespace_name;
++kurz::x;


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: