wake-up-neo.com

statischer Variablenverbindungsfehler

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.

63
subzero

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.

81
Luchian Grigore

Du hast static string theString;, habe es aber nicht definiert.

Umfassen

string Log::theString;

zu Ihrer cpp Datei

16
Lol4t0