静态variables链接错误

我在Mac上编写C ++代码。 编译时为什么会出现这个错误?

未定义的架构i386符号:“Log :: theString”,引用来自:libTest.a(Log.o)中的Log :: method(std :: string)ld:符号(s)not found for architecture i386叮当声:错误:链接器命令失败,退出代码1(使用-v查看调用)

不知道如果我的代码是错误的,或者我必须添加额外的标志Xcode。 我当前的XCodeconfiguration是“静态库”项目的默认configuration。

我的代码:

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

我从testing代码调用'方法',这样:'Log :: method(“asd”):'

谢谢你的帮助。

您必须在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任何地方,包括标题。

你声明了static string theString; ,但还没有定义它。

包括

 string Log::theString; 

到你的cpp文件