我有一个MFC应用程序正在写一个巨大的对象到磁盘。 为了理解正在编写的内容,我想到了将所有调用记录到存档<<通过流插入和.write方法替换那些用宏
#pragma once
#ifndef LOGMAGIC
#define LOGMAGIC
class LogTab
{
public:
static int LogIndentCount;
LogTab()
{
LogIndentCount++;
}
~LogTab()
{
LogIndentCount--;
}
};
#define ARINSERT(AR,OBJ) TRACE( "%*s %s\n", LogTab::LogIndentCount, #OBJ); AR << OBJ;
#define ARWRITE(AR,OBJ,SIZE) TRACE("%*s %s\n", LogTab::LogIndentCount, #OBJ); AR.write(OBJ, SIZE);
#endif
所以我创建了上面的代码片段并将其放在stdafx.h中但是我收到以下错误:
错误1错误LNK2001:未解析的外部符号“public:static int LogTab :: LogIndentCount“(?LogIndentCount @ LogTab @@ 2HA)
我做错了什么? 有没有更好的方法来实现我的目标?
答案 0 :(得分:2)
您必须在任何一个.cpp文件中定义LogTab::LogIndentCount
,
#include"LogTab.h"
//...
int LogTab::LogIndentCount = 0;
[作为旁注,如果它是使用此class
的多线程系统,那么您可以考虑使LogIndentCount
同步(线程安全)]
答案 1 :(得分:0)
必须显式初始化静态变量。