c ++ copy struct unresolved link

时间:2014-01-06 10:59:51

标签: c++ struct

我正在研究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;

}

4 个答案:

答案 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
}

或者,根本不要定义一个类 - 它似乎只是放置静态函数的地方,在这种情况下命名空间更合适。