Portál AbcLinuxu, 12. listopadu 2025 14:49
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.