ошибка связи статической переменной - PullRequest
62 голосов
/ 14 февраля 2012

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

Неопределенные символы для архитектуры i386: "Log :: theString", на которую ссылается: Log :: method (std :: string) в libTest.a (Log.o) ld: символ (ы) не найдены для архитектуры i386 clang: error: сбой команды компоновщика с кодом выхода 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 ]

80 голосов
/ 14 февраля 2012

Вы должны определить статику в файле 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 везде, где вы включаете заголовок.

16 голосов
/ 14 февраля 2012

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

Включите

string Log::theString;

в свой cpp файл

...