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

时间:2011-08-22 09:45:38

标签: 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中但是我收到以下错误:

  

错误1错误LNK2001:未解析的外部符号“public:static int   LogTab :: LogIndentCount“(?LogIndentCount @ LogTab @@ 2HA)

我做错了什么? 有没有更好的方法来实现我的目标?

2 个答案:

答案 0 :(得分:2)

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

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

[作为旁注,如果它是使用此class的多线程系统,那么您可以考虑使LogIndentCount同步(线程安全)]

答案 1 :(得分:0)

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