2013-06-27 33 views
0
/* 
* CDummy.h 
*/ 
#ifndef CDUMMY_H_ 
#define CDUMMY_H_ 

class CDummy { 

public: 
    CDummy(); 
    virtual ~CDummy(); 
}; 

#endif /* CDUMMY_H_ */ 

我讀過一個不應該在頭文件中聲明類變量的方法。這是正確的嗎? 所以我宣佈它在下面cpp文件:在C++中使用頭文件時如何以及在何處定義類變量

/* 
* CDummy.cpp 
*/ 

#include "CDummy.h" 

static int counter = 0; //so here is my static counter. is this now private or public? how can i make it public, i cannot introduce a public block here. 

CDummy::CDummy() { 
    counter++; 

} 

CDummy::~CDummy() { 
    counter--; 
} 

使用此代碼我無法從我的主程序訪問classvariable ....

THX

回答

3

A「類變量」需要屬於一類。所以它必須是在類定義中聲明爲。如果類定義在頭文件中,那麼類變量聲明也必須位於頭文件中。

類變量的定義應該放在一個實現文件中,通常是類的成員被定義的文件。這裏有一個簡單的例子:

foo.h中

struct Foo 
{ 
    void foo() const; 
    static int FOO; // declaration 
}; 

Foo.cpp中

void Foo::foo() {} 
int Foo::FOO = 42; // definition 

你有什麼在這裏:

static int counter = 0; 

是一個靜態變量,任何類的靜態成員。它只是非成員靜態變量,對編譯單元CDummy.cpp是靜態的。

1

static int counter = 0; //所以這裏是我的靜態計數器。這是私人還是公共?我怎麼能讓它公開,我不能在這裏引入公共塊。

從我看到counter代碼僅僅是一個全球性的靜態變量,因爲它是不是在你的CDummy

靜態變量的任何地方declated應該是公開的,這樣你可以在類的聲明外初始化它們。你的代碼看起來應該像這樣把它公開:

class CDummy { 
public: 
    static int count; 
    CDummy(); 
    virtual ~CDummy(); 
}; 
// inside CDummy.cpp 
int CDummy::count = 0; 

Here你可以閱讀更多關於如何在類聲明中使用靜態變量。

相關問題