Referera en static const int

C/C++

1 svar · 166 visningar · startad av Viktor

Medlem sedan aug. 20021 752 inlägg
Trådstart#1

Har gjort om alla mina #define till fina "static const int" som ligger i de klasser där de hör hemma och det ser ju jätte fint ut men nu har jag stött på ett litet problem, eller snarare en undran.
Här är några av mina "static const int", CGame innehåller en (eller flera) CPlayer som innehåller ett CField, allt sakpas direkt när spelet startar.

class CGame
{
private:
  int iStatus;
public:
  int GetStatus(){return(iStatus);};
  static const int STATUS_STOP=80;
  static const int STATUS_RUN=81;
  static const int STATUS_PAUSE=82;
};

class CField
{
private:
  int iStatus;
public:
  int GetStatus(){return(iStatus);};
  static const int STATUS_REMOVE_LINE=87;
  static const int STATUS_NORMAL=88;
  static const int MOVE_DOWN=60;
};

I min kod vill jag nu kolla om statusen för CGame är STATUS_RUN och om statusen för CField är STATUS_NORMAL, då fungerar denna kod,

if((pGame->GetStatus()==pGame->STATUS_RUN)&&
((pGame->GetPlayer(1)->GetField()->GetStatus()==CField::STATUS_NORMAL))&&

men om jag skriver

if((pGame->GetStatus()==pGame->STATUS_RUN)&&
((pGame->GetPlayer(1)->GetField()->GetStatus()==pGame->GetPlayer(1)->GetField()->STATUS_NORMAL))&&

så får jag "undefined reference to `CField::STATUS_NORMAL'" när jag kompilerar (gcc 3.0.3 linux), varför?? Jag kan själv inte se någon skilnad på dessa 2 klasser.

/Viktor

Medlem sedan okt. 20013 217 inlägg
#2

Allt som är deklareat som Static kommer inte att exponeras av länkaren och kan bara användas där den är deklarerad.

245 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)