Undefined reference d'un attribut static

Undefined reference d'un attribut static

by Joel Coelho Oliveira -
Number of replies: 4

Bonjour,

l'exécution du make nous affiche plusieurs erreurs dans le même fichier, chaque fois nous avons des undefined reference pour des attributs static, y aurait-il une syntaxe particulière à suivre pour la création d'un getter de static ?

In reply to Joel Coelho Oliveira

Re: Undefined reference d'un attribut static

by Ronan Boulic -

le message "undefined reference" est produit à l'étape d'édition de liens pour assembler tous les modules compilés en un seul exécutable.

il provient en général de fautes de frappe sur le nom d'un attribut/fonction/méthode utilisée dans un autre module que celui où cet attribut/ fonction/méthode est définie.

c'est la première chose à vérifier

La seconde chose importante est qu'un attribut static est limité à la portée de la classe: seules les méthodes de la classe peuvent s'en servir.

troisième point: pourquoi vouloir faire un getter de l'attribut static ? ça ressemble à un controunement d'encapsulation...

In reply to Ronan Boulic

Re: Undefined reference d'un attribut static

by Joel Coelho Oliveira -

L'idée serait de garder les id des nœuds dans un tableau, pour permettre une gestion plus simple des erreurs dans le fichier nœud directement

C'est une mauvaise chose ? 

In reply to Joel Coelho Oliveira

Re: Undefined reference d'un attribut static

by Adrien Michel Prost -

Salut Joel, les attributs statiques doivent être initialisés en dehors de la classe avant d'être utilisés. Le livre Introduction a la programmation orienté objet en C++ montre un exemple à la page 24. Voici un autre exemple de ma part qui compile :

#include <iostream>

using namespace std;


class Rectangle {

    int width, height;

  public:

    static int test;

    void set_values (int,int);

    int area() {return width*height;}

    int get_test();

};


int Rectangle::test{1};


void Rectangle::set_values (int x, int y) {

  width = x;

  height = y;

}


int Rectangle::get_test(){

  return test;

}


int main () {

  Rectangle rect;

  rect.set_values (3,4);

  cout << rect.get_test();

  return 0;

}