Ich schreibe C++ - Code auf einem Mac. Warum erhalte ich diesen Fehler beim Kompilieren ?:
Undefinierte Symbole für Architektur i386: "Log :: theString", referenziert von: Log :: method (std :: string) in libTest.a (Log.o) ld: Symbol (e) für Architektur i386 nicht gefunden clang: error: Linker-Befehl mit Exit-Code 1 fehlgeschlagen (Aufruf mit -v)
Ich bin mir nicht sicher, ob mein Code falsch ist oder ich zusätzliche Flags zu Xcode hinzufügen muss. Meine aktuellen XCode-Konfigurationen sind die Standardkonfigurationen für ein "statisches Bibliotheksprojekt".
Mein 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;
}
Ich rufe die 'Methode' aus einem Testcode folgendermaßen auf: 'Log :: Methode ("asd"):'
danke für Ihre Hilfe.
Sie müssen die Statik in der Datei cpp
definieren.
Log.cpp
#include "Log.h"
#include <ostream>
string Log::theString; // <---- define static here
void Log::method(string arg){
theString = "hola";
cout << theString << endl;
}
Sie sollten auch using namespace std;
Aus der Kopfzeile entfernen. Gewöhnen Sie sich an, solange Sie noch können. Dies verschmutzt den globalen Namespace mit std
, wo immer Sie den Header einfügen.
Du hast static string theString;
, habe es aber nicht definiert.
Umfassen
string Log::theString;
zu Ihrer cpp
Datei