ison Temat założony przez niniejszego użytkownika  | 
[C++] Zapowiadanie 'namespace' » 2010-07-06 17:06:58 Witam, mam przykładowo taki oto kod #include <cstdio>
  int main() {     printf( "Foo: %d", myFoo::Foo ); }
  namespace myFoo {     int Foo; }
  jak (o ile w ogóle się da) zapowiedzieć namespace nie zmieniając kolejności (tzn najpierw ma wystąpić funkcja main)? dlaczego namespace nie można zapowiedzieć w zwyczajny sposób?  | 
 | 
DejaVu  | 
» 2010-07-06 17:30:17 Jak chcesz się dostać do zmiennej, która nie istnieje? :) Najpierw jej używasz, a potem deklarujesz. /edit: Czasami się przydaje zapowiedzenie, że dana przestrzeń nazw istnieje, np. gdy w klasie mamy zapis: class CZonk {     friend class przestrzen::CKlasaJakas; }; Wtedy należy po prostu przed deklaracją klasy dopisać: W innym przypadku nie ma potrzeby informowania, że istnieje jakaś przestrzeń nazw.  | 
 | 
ison Temat założony przez niniejszego użytkownika  | 
» 2010-07-06 17:33:17 no właśnie jak to zrobić żeby zapowiedzieć namespace'a? przykładowo o to samo mógłbyś zapytać: #include <cstdio>
  int main() {     printf( "%d", dodaj( 5, 6 ) ); }
  int dodaj( int zmienna1, int zmienna2 ) {     return zmienna1 + zmienna2 +; }
  "jak chcesz używać funkcji, która nie istnieje" a rozwiązanie tkwi w tylko jednej linijce przed main int dodaj( int zmienna1, int zmienna2 );
  to samo pytanie kieruje apropo namespace, co jeśli mam 2 namespace'y i oba nawzajem z siebie korzystają? przecież w kodzie zawsze któryś musi być pierwszy zadeklarowany  | 
 | 
lenrokskate  | 
» 2010-07-06 19:02:59 namespace pierwszy { }
  namespace drugi {     int zmienna1, zmienna2; }
  namespace pierwszy {     int zmienna1, zmienna2; }
  void zrob() {     pierwszy::zmienna1 = drugi::zmienna1;     drugi::zmienna2 = pierwszy::zmienna2; }
  powinno wejść to samo możesz robić z funkcjami  | 
 | 
ison Temat założony przez niniejszego użytkownika  | 
» 2010-07-06 19:27:46 nie chodzi mi o takie coś... coś takiego: namespace pierwszy {      }
  namespace drugi {      }
  chce uzyskać taki efekt: #include <cstdio>
  namespace Foo; 
  int main() {      }
  namespace Foo  {      }
  tylko niestety ta linijka jest błędna: @lenroskate, ta linijka w twoim programie jest zbędna :p  | 
 | 
lenrokskate  | 
» 2010-07-06 19:57:09 kurde coś mi się porąbało i źle to napisałem xD ale w twoim przykładzie powinno wystarczyć zamienienie namespace foo; na namespace foo{} #include <cstdio>
  namespace Foo { } 
  int main() {      }
  namespace Foo  {      }
   | 
 | 
ison Temat założony przez niniejszego użytkownika  | 
» 2010-07-06 20:23:56 no ba, jeśli to byłoby takie łatwe to bym nie zakładał tego tematu, właśnie chodzi mi o to że tym sposobem się nie da zrobić  | 
 | 
DejaVu  | 
» 2010-07-06 21:01:18 #include <cstdio> int main() {     zmienna = 13;     printf( "%d\n", zmienna );     int zmienna;     return 0; } A da się zrobić coś takiego? Przemyśl co chcesz zrobić bo chyba sam już nie wiesz czego tak naprawdę oczekujesz. /edit: Wracając do posta pierwszego: Deklaruje przestrzeń nazw i komunikat jak byś nie zauważył się zmienia na: error: 'Foo' is not a member of 'myFoo'
  Dodam, że można to rozwiązać np. tak: #include <cstdio>
  namespace myFoo {     extern int Foo; }
  int main() {     printf( "Foo: %d", myFoo::Foo ); }
  namespace myFoo {     int Foo = 123; }
  Niemniej jednak po co? W Twoim przykładzie stosowanie słowa kluczowego extern nie ma uzasadnienia i program powinien być zaprojektowany tak: #include <cstdio>
  namespace myFoo {     int Foo = 123; }
  int main() {     printf( "Foo: %d", myFoo::Foo ); }
   | 
 | 
|  « 1 »  2 |