2011-05-17 27 views
0

內部類常量字符串,我想定義一些常量strings.however編譯器會報告錯誤,當我使用如何定義在C++方法

class A { 
static const std::string s = "test" 
}; 

裏面的類。怎麼做?我需要在類定義之外定義常量嗎?

+0

由於許多答案已經陳述過,您必須在類聲明之外定義值(通常不在頭文件中)。但是,您可以給內置類型賦值(在您的示例中,'std :: string'的子類型爲'int',它將起作用)。 – 2011-05-17 23:48:53

回答

4

我認爲你必須在外面定義它。

class A { 
    static const std::string s; 
}; 

const std::string A::s("test"); 
+0

@Christian,我們可以在裏面定義整型常量,對嗎? – user705414 2011-05-17 23:42:58

+0

@ user705414:No. – 2011-05-17 23:43:48

+0

但對於整數常量,你也可以使用枚舉。 – 2011-05-17 23:45:32

0

是的,它應該在類定義的邊上定義。

const std::string A::s = "test" ; 

C++0x初始化被允許在類定義本身(result 1)。但我不知道爲什麼std::string類型是不允許的(result 2)。

呃..從錯誤信息看來,它似乎只允許爲積分數據類型。

+0

你忘了A ::,因爲他希望它成爲一名班員。 – 2011-05-17 23:41:31

+0

Christian Rau - 謝謝,沒有注意到它。 – Mahesh 2011-05-17 23:42:57

+0

任何編譯器都支持C++ 0x標準? – user705414 2011-05-17 23:53:01

0

您在類之外初始化靜態成員(與C#不同,您可以在同一位置聲明和初始化成員)。

class A { 
static const std::string s; 
}; 

// initialize your static members outside of the class definition. 
const std::string A::s = "Some text here"; 
+0

它們不僅應該在課堂之外,它們也應該(一般來說)只在.cpp文件中定義,而不是在.h中,否則您可能會違反[One Definition] Rule(http:// en.wikipedia.org/wiki/One_Definition_Rule)。 – 2011-05-17 23:46:37

+0

如果我在標題中使用#pragma一次,那麼可以嗎? – user705414 2011-05-17 23:52:25

相關問題