静态变量链接错误
我在Mac上编写C ++代码。 编译时为什么会出现这个错误?:
架构i386的未定义符号:“Log :: theString”,引用来自:libTest.a(Log.o)中的Log :: method(std :: string)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”):''
谢谢你的帮助。
您必须在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
文件