內部類常量字符串,我想定義一些常量strings.however編譯器會報告錯誤,當我使用如何定義在C++方法
class A {
static const std::string s = "test"
};
裏面的類。怎麼做?我需要在類定義之外定義常量嗎?
內部類常量字符串,我想定義一些常量strings.however編譯器會報告錯誤,當我使用如何定義在C++方法
class A {
static const std::string s = "test"
};
裏面的類。怎麼做?我需要在類定義之外定義常量嗎?
我認爲你必須在外面定義它。
class A {
static const std::string s;
};
const std::string A::s("test");
@Christian,我們可以在裏面定義整型常量,對嗎? – user705414 2011-05-17 23:42:58
@ user705414:No. – 2011-05-17 23:43:48
但對於整數常量,你也可以使用枚舉。 – 2011-05-17 23:45:32
是的,它應該在類定義的邊上定義。
const std::string A::s = "test" ;
在C++0x
初始化被允許在類定義本身(result 1)。但我不知道爲什麼std::string
類型是不允許的(result 2)。
呃..從錯誤信息看來,它似乎只允許爲積分數據類型。
你忘了A ::,因爲他希望它成爲一名班員。 – 2011-05-17 23:41:31
Christian Rau - 謝謝,沒有注意到它。 – Mahesh 2011-05-17 23:42:57
任何編譯器都支持C++ 0x標準? – user705414 2011-05-17 23:53:01
您在類之外初始化靜態成員(與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";
它們不僅應該在課堂之外,它們也應該(一般來說)只在.cpp文件中定義,而不是在.h中,否則您可能會違反[One Definition] Rule(http:// en.wikipedia.org/wiki/One_Definition_Rule)。 – 2011-05-17 23:46:37
如果我在標題中使用#pragma一次,那麼可以嗎? – user705414 2011-05-17 23:52:25
由於許多答案已經陳述過,您必須在類聲明之外定義值(通常不在頭文件中)。但是,您可以給內置類型賦值(在您的示例中,'std :: string'的子類型爲'int',它將起作用)。 – 2011-05-17 23:48:53