Witam. Jak można zrobić żeby nie deklarując w klasie składowej tablicy była ona widoczna dla funkcji klasy? Dodam że ta tablica jest tablica zainicjowana już w momencie deklaracji.
mam ją w pliku tablica.cpp. Z góry dziękuję za wszelkie sugestie
Zapewne musisz użyć extern
? Zazwyczaj robi się to tak, że jest plik nagłówkowy z extern ...
, który jest dołączany do każdego pliku, gdzie zmienna jest potrzebna, a tylko jeden z nich definiuje tę zmienną.
Co Ty w zasadzie próbujesz osiągnąć?
w pliku tablica.h napisać:
extern int tablica[];
- czy jakoś tam aby odpowiadało deklaracji.
dołączyć plik tablica.h
już tłumaczę...
Mam klasę której każdy obiekt będzie używał tych samych danych z tablicy.
mam taka tablice:
enum SYMBOL { e, a, b, c, d };
const SYMBOL TabDodawania[5][5]=
{
{ e, a, b, c, d },
{ a, b, c, d, e },
{ b, c, d, e, a },
{ c, d, e, a, b },
{ b, c, d, e, a }
};
i to jest plik tablica.h
mam dodac przed const extern
i dolaczyc do naglowka tablica.h?
tabilca.h
enum SYMBOL { e, a, b, c, d };
extern const SYMBOL TabDodawania[5][5];
tablica.cpp
#include "tabilca.h"
const SYMBOL TabDodawania[5][5]=
{
{ e, a, b, c, d },
{ a, b, c, d, e },
{ b, c, d, e, a },
{ c, d, e, a, b },
{ b, c, d, e, a }
};
Ale powinieneś to zrobić jako składową statyczną klasy.
No i jak bym zainicjował takie tablice jako składowe?
Tak, jak inicjalizuje się statyczne składniki klas.
W C++11 można nawet tak:
class X {
public:
// Wybacz, nie chce mi się tyle literek pisać. ;-)
enum Symbol {
a, b, c
};
constexpr static Symbol Tablica[3][3] = {
{a, b, c},
{c, b, a},
{b, a, c}
};
};
Używam g++ i dostałem taki err:
inc/symbol.hh:25:2: note: C++0x ‘constexpr’ only available with -std=c++0x or -std=gnu++0x
Czego to wina?
To była taka ciekawostka, myślałem, że wiesz jak to zrobić "po staremu". Żeby to działało dodaj do opcji kompilatora -std=c++0x
. Możesz też to olać i zrobić "starą" inicjalizację:
class X {
public:
// Wybacz, nie chce mi się tyle literek pisać. ;-)
enum Symbol {
a, b, c
};
const static Symbol Tablica[3][3];
};
const X::Symbol X::Tablica[3][3] = {
{a, b, c},
{c, b, a},
{b, a, c}
};
Chyba powinieneś się nauczyć tego języka, jeżeli chcesz w nim pisać.