如何使用宏跟踪 MFC 序列化调用
我有一个 MFC 应用程序正在将大量对象层次结构写入磁盘。 为了理解所写的内容,我想记录所有对 archive << 的调用。通过流插入和 .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)
我做错了什么? 有更好的方法来实现我正在做的事情吗?
I got a MFC app that is writing a huge hierarichy of objects to disk.
To make sense of what is being written I thought of logging all the calls to archive << via stream insertion and .write method by replacing those with macros
#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
So I created above snippet of code and put it in stdafx.h but I'm getting the following error:
Error 1 error LNK2001: unresolved external symbol "public: static int
LogTab::LogIndentCount" (?LogIndentCount@LogTab@@2HA)
What am I doing wrong?
Is there a better way to achieve what I am doing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您必须在任何一个 .cpp 文件中将
LogTab::LogIndentCount
定义为,[作为旁注,如果它是使用此
class
的多线程系统,则你可能会考虑使LogIndentCount
同步(线程安全)]You have to define
LogTab::LogIndentCount
in any one of the .cpp files as,[As a side note, if it's a multi threaded system which is using this
class
then you may think of makingLogIndentCount
synchronized (thread safe)]静态变量必须显式初始化。
A static variable must be explicitly initialized.