Portál AbcLinuxu, 10. května 2025 07:29
int pole[]={1,2,3,4,5};
Problem je v tom, ze ono pole je private atribut jedne tridy (o jeho inicializaci se snazim prave v jejim konstruktoru) a g++ mi vyhazuje tuto chybu:
expected primary-expression before ']' token
Nevite nekdo co s tim? Potrebuju inicializovat pole takto, ne clen po clenu (pole[0]=0;pole[1]=1,...).
Dekuji.
const int pole[5] = {1,2,3,4,5}; memcpy(m_pole,pole,sizeof(pole));
class X { int *m_pole; int m_size; public: X() { static int pole[] = {1, 2, 3, 4, 5}; m_pole = pole; m_size = sizeof pole / sizeof pole[0]; } . . . };
class X { static int m_pole[]; };Cpp:
int X::m_pole[] = { ... };
class X { const int *m_pole; int m_size; public: X() { static const int pole[] = {1, 2, 3, 4, 5}; m_pole = pole; m_size = sizeof pole / sizeof pole[0]; } . . . };
std::vector<int>
, pak by se nejspíš něco vymyslet dalo.
Prvkem třídy nemůže být objekt s proměnnou velikostí. Takže pokud by to pole mělo mít různou velikost pro různé instance třídy, bylo by potřeba ho alokovat dynamicky ...Nebo, pokud zname velikost pole v dobe kompilace, stvorit sablonu.
... a vzniká otázka, jak potom udělat konstruktor (může být třeba konstruktor variadická funkce?).Ano muze.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.