c – 静态变量链接错误
作者:互联网
我在mac上编写C代码.编译时为什么会出现此错误?:
Undefined symbols for architecture i386: “Log::theString”,
referenced from:
Log::method(std::string) in libTest.a(Log.o) ld: symbol(s) not found for architecture i386 clang: error: linker command failed with
exit code 1 (use -v to see invocation)
不确定我的代码是否错误或者我必须向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”):’
谢谢你的帮助.
解决方法:
您必须在cpp文件中定义静态.
Log.cpp
#include "Log.h"
#include <ostream>
string Log::theString; // <---- define static here
void Log::method(string arg){
theString = "hola";
cout << theString << endl;
}
您还应该删除使用命名空间std;从标题.在你还可以的时候养成这个习惯.无论您何时包含标头,这都将使用std污染全局命名空间.
标签:c,xcode,clang,static-methods,static-libraries 来源: https://codeday.me/bug/20190911/1804384.html