2011-12-02 5 views
2

J'ai cette classe:initialisation pointeur Extern

Logger.h

class Logger{ 

    std::string filename; 
    std::ofstream fileStream; 

    /*Some methods ...*/ 
}; 

extern Logger* log; 

Dans un autre fichier d'en-tête, j'ai inclus le * log définition:

.h

#include "Logger.h" 

class Foo{ 
    Logger* log; 

    /*Other code*/ 
}; 

Mais si dans le fichier Foo.cpp j'essaye de faire ceci:

log = new Logger(); 

le compilateur me donner une erreur, une idée?

+2

Quelle est l'erreur du compilateur? –

+4

Pour toutes les questions, cela * aide * grandement à indiquer quelle erreur le compilateur donne. En fait, cela vous aide souvent à trouver l'erreur vous-même si vous méditez quelques secondes sur le message d'erreur. – thiton

+5

Où dans Foo.cpp? Pourquoi ne pas mettre le code pertinent pour nous et l'erreur du compilateur? – littleadv

Répondre

2

D'abord, les variables déclarées comme external doivent être définies. Vous devez donc avoir

Logger *log; 

dans Logger.cpp. Vous pouvez également initialiser là comme ceci:

Logger *log = new Logger(); 

Deuxièmement, vous n'avez pas besoin de nouvelles déclarations, qui vous avez juste besoin d'inclure Logger.h, pas besoin de déclarer une autre variable Logger dans Foo.h, il suffit d'utiliser log de Logger.h.

+0

Merci! Ca marche, c'est ma première fois avec un pointeur externe ... merci encore! –

+0

Une question, cette variable est un pointeur, pourquoi je ne peux pas l'allouer dans une autre classe à l'exécution? –

+0

Vous devriez pouvoir l'affecter n'importe où. Assurez-vous de ne pas l'allouer plusieurs fois sans supprimer les allocations précédentes. – n0rd

Questions connexes