2011-01-10 1 views
1

J'ai un programme qui fonctionne bien sous VC++, mais qui me donne une erreur sous GCC.La taille de stockage de 'var' n'est pas connue

dans les log.h:

 
namespace logType { 
    enum Enum { 
     None = 0, 
     Info, 
     Warning, 
     Error, 
    }; 
    std::string Name[]; 
} 

dans les log.cpp:

 

std::string logType::Name[] = { 
    "None", 
    "Info", 
    "WARNING", 
    "ERROR" 
}; 

Cela fonctionne bien quand je compile log.cpp. Cependant, si un autre fichier comprend log.h, que les erreurs de fichier sur:

error: storage size of ‘logType::Name’ isn't known

J'ai essayé spécifier la taille du tableau Nom [] dans l'un ou l'autre des fichiers, mais change juste la erreur à celle de la redéclaration.

Comment puis-je coopérer avec GCC?

+0

quand obtenez-vous l'erreur, lors de la liaison des fichiers * .o ou lors de la génération du fichier .o? – hhafez

+0

Lors de la génération du fichier .o. – Nairou

Répondre

8

Ajouter extern à log.h La déclaration de votre nom. Votre symbole apparaît à deux endroits.

+0

Oui. Les fonctions n'en ont pas besoin (bien que cela ne fasse pas de mal) mais les variables déclarées dans un en-tête nécessitent extern. –

Questions connexes