Undefined reference d'un attribut static

Undefined reference d'un attribut static

par 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

par 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

par 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

par 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;

}