我有一个 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 但我收到以下错误:
Error 1 error LNK2001: unresolved external symbol "public: static int LogTab::LogIndentCount" (?LogIndentCount@LogTab@@2HA)
我做错了什么? 有没有更好的方法来实现我正在做的事情?
最佳答案
您必须在任何一个 .cpp 文件中定义 LogTab::LogIndentCount
,
#include"LogTab.h"
//...
int LogTab::LogIndentCount = 0;
[作为旁注,如果它是一个使用此 class
的多线程系统,那么您可能会考虑使 LogIndentCount
同步(线程安全)]
关于c++ - 如何使用宏跟踪 MFC 序列化调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7145608/