Referință nedefinită la o variabilă statică c++ (Programare, C++, Static)

Aqeel Raza a intrebat.

Bună ziua, primesc o eroare de referință nedefinită în următorul cod:

class Helloworld{
  public:
     static int x;
     void foo();
};
void Helloworld::foo(){
     Helloworld::x = 10;
};

Nu vreau o static foo() funcție. Cum pot să accesez static variabilă a unei clase în non-static metodă a unei clase?

Comentarii

  • Posibil duplicat al referinței nedefinite la un membru static al clasei –  > Por underscore_d.
3 răspunsuri
Andy Prowl

Nu vreau o static foo() funcție

Ei bine, foo() este nu statică în clasa ta, și nu nu trebuie să o faceți static pentru a accesa static variabilele clasei dumneavoastră.

Ceea ce trebuie să faceți este pur și simplu să furnizați o clasă definiție pentru variabila membră statică:

class Helloworld {
  public:
     static int x;
     void foo();
};

int Helloworld::x = 0; // Or whatever is the most appropriate value
                       // for initializing x. Notice, that the
                       // initializer is not required: if absent,
                       // x will be zero-initialized.

void Helloworld::foo() {
     Helloworld::x = 10;
};

Comentarii

  • Mulțumesc mult, omule. Eu instanțiez HelloWorld::x, dar nu cu int. Încă o dată, mulțumesc. –  > Por Aqeel Raza.
  • @AndyProwl Am încercat acest lucru și am primit o eroare de compilare pe linia care stabilește x la 0. Spune că ‘foo’ din ‘class Helloworld’ nu numește un tip. Vreun sfat? –  > Por ufmike.
Pete Becker

Codul este corect, dar incomplet. Clasa Helloworld are un declarație a membrului său static de date x, , dar nu există nici un definiție a acestui membru de date. Undeva în codul sursă aveți nevoie de

int Helloworld::x;

sau, dacă 0 nu este o valoare inițială adecvată, adăugați un inițializator.

pvc

Întrebare veche, dar;

De la c++17 puteți declara static membri inline și să îi instanțiem în interiorul corpului lui class fără a fi nevoie de un element out-of-class definiție:

class Helloworld{
  public:
     inline static int x = 10;
     void foo();
};

Tags:,