爲什麼在C++中這是無效的?爲什麼靜態成員必須在main()之外初始化?
class CLS
{
public:
static int X;
};
int _tmain(int argc, _TCHAR* argv[])
{
CLS::X=100;
return 0;
}
爲什麼在C++中這是無效的?爲什麼靜態成員必須在main()之外初始化?
class CLS
{
public:
static int X;
};
int _tmain(int argc, _TCHAR* argv[])
{
CLS::X=100;
return 0;
}
一旦定義了一個靜態數據成員,它的存在,即使不存在靜態數據成員的類的對象。在你的例子中,即使已經定義了靜態數據成員CLS :: X,也不存在類X的對象。
似乎這不回答我的問題... – yoyo 2010-12-22 05:44:46
static
成員不是類對象的一部分,但它們仍然是類作用域的一部分。它們必須在類的外部獨立初始化,就像使用類作用域解析運算符定義成員函數一樣。
int CLS::X=100;
他們可以在裏面你的例子來改變主一樣,但你必須在全球範圍內爲他們明確地分配存儲空間,喜歡這裏:
class CLS
{
public:
static int X;
};
int CLS::X = 100; // alocating storage, usually done in CLS.cpp file.
int main(int argc, char* argv[])
{
CLS::X=100;
return 0;
}
+1。這是真正的問題。在原始示例中,您從未實際分配靜態成員的存儲空間。 – 2010-12-22 06:14:50
這不是靜態成員必須在全局範圍內初始化,而是靜態成員必須爲其分配存儲空間。
class CLS {
public:
static int X;
};
int CLS::X;
int _tmain(int argc, _TCHAR* argv[])
{
CLS::X=100;
return 0;
}
什麼是c + _ +?你是否經常將unde_rscore插入到w_ords中,因爲沒有reas_on? – jalf 2010-12-22 08:55:09