2017-09-30 8 views
0

J'ai essayé pendant des heures pour me débarrasser de mes erreurs, mais il ne va pas disparaître, j'ai recherché d'autres messages, mais rien ne semble fonctionner.symbole externe non résolu dans la classe

j'ai obtenu mon .H fichier avec quelque chose comme ceci:

using namespace std; 

    class common 
    { 
    public: 
    common(); 

     static double common::s_a; 
     static double common::s_b; 

Alors je suis un .cpp où j'ai défini ces variables comme ceci:

#include "common.h" 

common::common() 
{ 
    common::s_a = 100; 
    common::s_b = 100; 
} 

Puis j'ai reçu ce message d'erreur (nom réel de la variable au lieu de a)

common.obj: erreur LNK2001: symbole externe non résolu "public: statique à double commun :: s_playerMaxHealth" (s_playerMaxHealth @ commune @@ 2NA?)

EDIT: Le problème est statique, si je supprime statique Je n'ai plus l'erreur. Cependant, j'ai besoin d'utiliser statique pour que cela fonctionne comme prévu.

+0

Possible copie de [Qu'est-ce qu'un undefined référence/erreur de symbole externe non résolue et comment puis-je y remédier?] (https://stackoverflow.com/questions/12573816/what-is-an-defined-reference-unresolved-external-symbol-error-and-how-do -i-fix) – user0042

+0

Vos affectations pour les variables statiques ne doivent pas être dans le constructeur. Au lieu de cela, ils devraient être dans la même portée que la classe a été définie, dans ce cas, c'est l'espace de noms global. – Jonesinator

Répondre

0

Vous doit définir ces variables comme si (dans votre fichier .cpp, en dehors de toute fonction):

double common::s_a; 
double common::s_b; 

C'est une déclaration (non une définition):

class common 
{ 
    static double common::s_a; 
    static double common::s_b; 

Ceci est une utilisation (pas une définition non plus):

common::common() 
{ 
    common::s_a = 100; 
    common::s_b = 100; 
}