J'écris du code C++ sur un Mac. Pourquoi est-ce que j'obtiens cette erreur lors de la compilation?:
Symboles non définis pour l'architecture i386: "Log :: theString", référencé à partir de: Log :: method (std :: string) dans libTest.a (Log.o) ld: symbole (s) introuvable (s) pour l'architecture i386 clang: erreur: la commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation)
Je ne sais pas si mon code est incorrect ou je dois ajouter des drapeaux supplémentaires à Xcode. Mes configurations XCode actuelles sont celles par défaut pour un projet de "bibliothèque statique".
Mon code:
Log.h ------------
#include <iostream>
#include <string>
using namespace std;
class Log{
public:
static void method(string arg);
private:
static string theString ;
};
Log.cpp ----
#include "Log.h"
#include <ostream>
void Log::method(string arg){
theString = "hola";
cout << theString << endl;
}
J'appelle la 'méthode' à partir d'un code de test, de cette façon: 'Log :: method ("asd"):'
merci de votre aide.
Vous devez définir la statique dans le fichier cpp
.
Log.cpp
#include "Log.h"
#include <ostream>
string Log::theString; // <---- define static here
void Log::method(string arg){
theString = "hola";
cout << theString << endl;
}
Vous devez également supprimer using namespace std;
de l'en-tête. Prenez l'habitude pendant que vous le pouvez. Cela polluera l'espace de noms global avec std
partout où vous incluez l'en-tête.
Vous avez déclaré static string theString;
, mais je ne l'ai pas défini.
Comprendre
string Log::theString;
dans votre fichier cpp