Статическая ошибка переменной ссылки
Я пишу код С++ на 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
файл