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 |