2012-09-24 3 views
0

Possible Duplicate:
Access issue regarding static variablevariables statiques accès

Je vais avoir ce qui semble être un problème semble vraiment banal, mais je ne peux pas travailler ce que la cause est.

J'ai une classe appelée stockage. tête de fichier:

#include <string> 
using namespace std; 
#include "Player.h" 

class Storage { 
public: 
    static void Initialise(); 
    static string GetInformation();  
private: 
    static Player player; 
}; 

RPC fichier:

string Storage::GetInformation() { 
    string returnString = ""; 
    // Get the players money 
    // Convert it to a string 
    string money("money"); 
    stringstream out; 
    out << player.GetMoney(); 
    money = out.str(); 
    returnString += "Money: " + money + "\n"; 

    // Get the players ship information 
    returnString += player.GetShipInformation(); 

    // Get the players current location 
    returnString += player.GetCurrentLocation(); 

    return returnString; 
} 

void Storage::Initialise() { 

} 

Cela donne une erreur: "undefined reference to` joueur de stockage ». J'ai essayé de googler et de peaufiner les choses, mais je n'arrive pas à trouver quelque chose qui fonctionne. Si quelqu'un pouvait me diriger dans la bonne direction pour un article à regarder, ce serait formidable, car je ne suis pas sûr de ce que le terme est à chercher pour obtenir la bonne réponse.

+3

Retirez le 'espace de noms à l'aide std,' de l'en-tête. –

+0

En passant, vous utilisez déjà un 'ostringstream' pour convertir votre argent d'un entier en une chaîne. Vous devriez utiliser le même canal pour la méthode * whole *. La méthode entière est rendue plus courte, plus claire et plus performante en la réécrivant comme «stringstream out»; out << "Money:" << argent << std :: endl << joueur.GetShipInformation() << player.GetCurrentLocation(); return out.str(); ' – meagar

Répondre

6

Vous avez déclaré le membre, mais pas défini il.

Vous devez, par ex. Storage.cpp au niveau le plus externe, à savoir au même niveau que les définitions de méthode:

Player Storage::player; 
+0

Merci pour cela, je l'ai trouvé ailleurs mais je l'ai mis dans le fichier d'en-tête au lieu du cpp, cela a aidé à éclaircir les choses. – user1694806

1

Il ne suffit pas de simplement déclarer une variable de classe statique, il faut aussi définir, par exemple en haut de votre fichier .cpp (mais après include s, bien sûr)

Player Storage::player;