статическая переменная ошибка связи


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

неопределенные символы для архитектуры i386: "Log:: theString", ссылка из: Log::method(std:: string) в libTest.бревно.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; 
}

Я вызываю "метод" из тестового кода, таким образом: 'Log:: method ("asd"):'

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

2 55

2 ответа:

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

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 везде, где вы включаете заголовочный.

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

включить

string Log::theString;

на cpp file