Статическая ошибка переменной ссылки

Я пишу код С++ на Mac. Почему я получаю эту ошибку при компиляции?:

Undefined символы для архитектуры i386: "Log:: theString", ссылка:       Log:: method (std::string) в libTest.a(Log.o) ld: символ не найден для архитектуры i386 clang: ошибка: команда компоновщика не удалась с код выхода 1 (используйте -v для вызова вызова)

Не уверен, что мой код неправильный или мне нужно добавить дополнительные флаги в Xcode. Мои текущие конфигурации XCode являются стандартными для проекта "статической библиотеки".

Мой код:

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; 
}

Я вызываю "метод" из тестового кода, таким образом: 'Вход:: метод ( "ASD" ):

спасибо за вашу помощь.

Ответ 1

Вы должны определить статику в файле cpp.

Log.cpp

#include "Log.h"
#include <ostream>

string Log::theString;  // <---- define static here

void Log::method(string arg){
    theString = "hola";
    cout   << theString << endl; 
}

Вы также должны удалить using namespace std; из заголовка. Входите в привычку, пока можете. Это будет загрязнять глобальное пространство имен с помощью std, где бы вы не включили заголовок.

Ответ 2

Вы объявили static string theString;, но не определили его.

Включить

string Log::theString;

в ваш cpp файл