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