• [^] # Re: Bonne question

    Posté par . En réponse au message ld me détruit des symboles importants. Évalué à 1.

    Je vais prendre un exemple pris de mon code actuel (ici, ce n'est pas vraiment un effet de bord du constructeur, mais simplement une utilisation non-explicile d'un objet) : J'ai un enssemble de classes dérivant toutes d'une même classe de base, avec une seule instance de chaque classe. Chacune de ces classes représente un module de mon application.
    //en-tête API de ma librairie
    class base {
     base() : next(first) { first = this; }
     
     static base* first;
     base* next;
    }
    
    //Code c++ de la librairie
    base* base::first = NULL;
    classe derivee : public base { }
    derivee unUniqueObjet;
    
    //code du main
    base * current = base::first;
    while (current) {
     printf("coucou\n");
     current = current->next;
    }
    
    Dans ce cas, le main devrait afficher "coucou", mais ce n'est pas le cas car le linker considère que l'objet "unUniqueObjet" n'est pas utilisé par main, et il me le vire à l'edition des liens. Si je déclare "unUniqueObjet" dans le main, ça fonctionne. Mais j'aimerais autant ne pas le faire : ça m'évite d'avoir plein de choses inutiles dans les en-têtes.