静态变量链接错误

我在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文件

链接地址: http://www.djcxy.com/p/86333.html

上一篇: static variable link error

下一篇: C++ lazy evaluation with templates