我正在研究c ++中的日期包装类
我想将tm结构复制到另一个结构,但它会抛出未解析的外部链接
错误2错误LNK2001:未解析的外部符号“public:static struct tm * DateUtils :: generateDateTimeStruct”(?generateDateTimeStruct @ DateUtils @@ 2PAUtm @@ A)
class DateUtils
{
public:
DateUtils()
{
}
static int getTodaysDate();
static tm * myDateTime;
static void generateDateTimeStruct();
};
tm* DateUtils::myDateTime = NULL;
int DateUtils::getTodaysDate()
{
// If i comment the calling, it does not throws an error
generateDateTimeStruct();
return DateUtils::myDateTime->tm_hour;
}
static void generateDateTimeStruct(){
time_t now = time(0);
static tm s;
now = time(NULL);
localtime_s(&s, &now);
DateUtils::myDateTime = &s;
}
答案 0 :(得分:1)
您需要在类声明之外(在某些.cpp文件中)定义此成员:
tm* DateUtils::myDateTime = NULL;
请注意,在定义其他成员时也会使用前缀为类的名称:
在班级宣言中:
static int getTodaysDate();
static void generateDateTimeStruct();
但是课外的定义:
int DateUtils::getTodaysDate() { ... }
void DateUtils::generateDateTimeStruct() { ... }
答案 1 :(得分:0)
由于myDateTime
已声明具有静态存储空间,因此需要为其分配一些内存。
正常的做法是在一个编译单元中定义;通常在源文件中:
tm* Wrapper::myDateTime = NULL;
答案 2 :(得分:0)
您必须定义静态数据成员。它只在类定义中声明,但没有在类外定义。在一些代码模块中写
tm * Wrapper::myDateTime;
答案 3 :(得分:0)
您声明了一个成员函数,但定义了一个具有相同名称的非成员函数。将定义更改为
static void DateUtils::generateDateTimeStruct(){
// your code here
}
或者,根本不要定义一个类 - 它似乎只是放置静态函数的地方,在这种情况下命名空间更合适。