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

标签 c++ mfc macros linker-errors

我有一个 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/

相关文章:

c - 如何正确使用STDERR_FILENO?

c++ - 代码生成期间的宏替换

c++ - 如何使用 C++ 在 Windows 中监视进程调用

c++ - 我的 QSqlQueryModel 不在 ListView 中显示数据

c++ - 如何在 Matlab 或 C++ 中实现简单的滑动窗口算法

c++ - GetWindowRect 坐标不是屏幕相关的

c++ - 请告诉我为什么虚函数在以下代码中不起作用

c++ - MFC C++ LNK 2019 错误

c# - 精美的UI桌面应用,选择哪个UI库?

c - 在C中获取标签的地址