類的靜態變數初始化問題
靜態成員變數的定義一共包括兩個部分.
像函式一樣,要先在類中宣告,然後再找個地方實現.靜態成員也要先在類中聲明瞭,再到類外"實現"一下.
這種初始化方式是由靜態成員的公有性質決定的,它不能放在建構函式裡由每一個物件來初始化,必須在類外實現
//Trace.h
#pragma once
#include <string>
using std::string;
class CTrace
{
public:
CTrace(void);
CTrace(const string &name);
~CTrace(void);
void debug(const string &msg);
static bool traceIsActive;
private:
string theFunctionName;
};
//Trace.cpp
#include <iostream>
#include "Trace.h"
bool CTrace::traceIsActive = false;//這句必須加上,否則連結錯誤
CTrace::CTrace(void)
{
}
inline CTrace::CTrace(const string &name):theFunctionName(name)
{
if (traceIsActive)
{
std::cout<<"Enter function"<<name<<std::endl;
}
}
CTrace::~CTrace(void)
{
if (CTrace::traceIsActive)
{
std::cout<<"Exit function"<<theFunctionName<<std::endl;
}
}
inline void CTrace::debug(const string &msg)
{
if (CTrace::traceIsActive)
{
std::cout<<msg<<std::endl;
}
}