[C++] Zapowiadanie 'namespace'
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

[C++] Zapowiadanie 'namespace'

AutorWiadomość
Temat założony przez niniejszego użytkownika
[C++] Zapowiadanie 'namespace'
» 2010-07-06 17:06:58
Witam,
mam przykładowo taki oto kod
C/C++
#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?
C/C++
namespace myFoo;
P-19597
» 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:
C/C++
class CZonk
{
    friend class przestrzen::CKlasaJakas;
};
Wtedy należy po prostu przed deklaracją klasy dopisać:
C/C++
namespace przestrzen { }
W innym przypadku nie ma potrzeby informowania, że istnieje jakaś przestrzeń nazw.
P-19601
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ć:
C/C++
#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
C/C++
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
P-19602
» 2010-07-06 19:02:59
C/C++
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
P-19604
Temat założony przez niniejszego użytkownika
» 2010-07-06 19:27:46
nie chodzi mi o takie coś...

coś takiego:
C/C++
namespace pierwszy
{
    //operacje na zmiennych znajdujacych sie w drugim
}

namespace drugi
{
    //operacje na zmiennych znajdujacych sie w pierwszym
}


chce uzyskać taki efekt:
C/C++
#include <cstdio>

namespace Foo; //deklaracja Foo

int main()
{
    //operacje na Foo
}

namespace Foo //definicja Foo
{
   
}
tylko niestety ta linijka jest błędna:
C/C++
namespace Foo;


@lenroskate, ta linijka w twoim programie
C/C++
namespace pierwszy { }
jest zbędna :p
P-19605
» 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{}

C/C++
#include <cstdio>

namespace Foo { } //deklaracja Foo

int main()
{
    //operacje na Foo
}

namespace Foo //definicja Foo
{
   
}
P-19608
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ć
P-19611
» 2010-07-06 21:01:18
C/C++
#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:
C/C++
namespace myFoo { };
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:
C/C++
#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:
C/C++
#include <cstdio>

namespace myFoo
{
    int Foo = 123;
}

int main()
{
    printf( "Foo: %d", myFoo::Foo );
}
P-19613
« 1 » 2
 Strona 1 z 2Następna strona