如何使用宏跟踪 MFC 序列化调用

发布于 2024-11-30 18:38:05 字数 814 浏览 2 评论 0原文

我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一袭白衣梦中忆 2024-12-07 18:38:05

您必须在任何一个 .cpp 文件中将 LogTab::LogIndentCount 定义为,

#include"LogTab.h"
//...
int LogTab::LogIndentCount = 0;

[作为旁注,如果它是使用此 class 的多线程系统,则你可能会考虑使 LogIndentCount 同步(线程安全)]

You have to define LogTab::LogIndentCount in any one of the .cpp files as,

#include"LogTab.h"
//...
int LogTab::LogIndentCount = 0;

[As a side note, if it's a multi threaded system which is using this class then you may think of making LogIndentCount synchronized (thread safe)]

画骨成沙 2024-12-07 18:38:05

静态变量必须显式初始化。

A static variable must be explicitly initialized.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文