静态可变链路错误 我在Mac上写C++代码。为什么在编译时会出现此错误?:

静态可变链路错误 我在Mac上写C++代码。为什么在编译时会出现此错误?:,c++,xcode,static-libraries,clang,static-methods,C++,Xcode,Static Libraries,Clang,Static Methods,架构i386的未定义符号:“日志::字符串”, 引用自: 在libTest.a(Log.o)ld:symbol中找不到体系结构i386的Log::方法(std::string):错误:链接器命令失败 退出代码1(使用-v查看调用) 不确定我的代码是否错误,或者我必须向Xcode添加额外的标志。我当前的XCode配置是“静态库”项目的默认配置 我的代码: Log.h------------ #包括 #包括 使用名称空间std; 类日志{ 公众: 静态无效方法(字符串参数); 私人: 静态字符串字符

架构i386的未定义符号:“日志::字符串”, 引用自: 在libTest.a(Log.o)ld:symbol中找不到体系结构i386的Log::方法(std::string):错误:链接器命令失败 退出代码1(使用-v查看调用)

不确定我的代码是否错误,或者我必须向Xcode添加额外的标志。我当前的XCode配置是“静态库”项目的默认配置

我的代码:

Log.h------------

#包括
#包括
使用名称空间std;
类日志{
公众:
静态无效方法(字符串参数);
私人:
静态字符串字符串;
};
Log.cpp----

#包括“Log.h”
#包括
void Log::方法(字符串arg){
theString=“hola”;

cout您必须在
cpp
文件中定义静态

Log.cpp

#include "Log.h"
#include <ostream>

string Log::theString;  // <---- define static here

void Log::method(string arg){
    theString = "hola";
    cout   << theString << endl; 
}
#包括“Log.h”
#包括

字符串日志::字符串;//您声明了
静态字符串字符串;
,但尚未定义它

包括

string Log::theString;

对于您的
cpp
文件

而不是定义,不(只是询问)?也许更好的术语是它为字符串分配空间。非常感谢。您帮了我很多忙!在标题中使用名称空间*
的好处很好。如果您早些时候改掉这个习惯,会更容易。只需将
使用名称空间std;
放在您自己的名称空间声明中:P
名称空间您的自定义名称空间e{使用名称空间std;}
#include "Log.h"
#include <ostream>

string Log::theString;  // <---- define static here

void Log::method(string arg){
    theString = "hola";
    cout   << theString << endl; 
}
string Log::theString;