2013-05-13 148 views
0

如下所示。我如何使用alphabet's自己的成員函數爲我的static member變量初始化alphabet變量?我需要從「Text.cpp」實現文件中進行初始化。靜態成員變量初始化

Text.h 

class Text { 
private: 

    struct Font { 
     enum Enum { 
      Arial, 
      Menlo, 
      Times 
     }; 
    }; 

    static Alphabet alphabet[3]; // library of letters 

}; // class 

我需要如下所示的東西,只是完成任務的正確方法。我還需要在運行期間初始化alphabet一次,因此我已將alphabet設爲靜態。謝謝。 ^^

Text.cpp 

Alphabet Text::alphabet[Text::Font::Arial].Load("./Alphabet/", "Arial", ".xml")); 
Alphabet Text::alphabet[Text::Font::Menlo].Load("./Alphabet/", "Menlo", ".xml")); 
Alphabet Text::alphabet[Text::Font::Times].Load("./Alphabet/", "Times", ".xml")); 
+2

請按照此鏈接, http://stackoverflow.com/questions/5803953/static-constructor-in-c – neo 2013-05-13 08:14:28

+0

@neo謝謝。知道可以仿真靜態構造函數是很好的。 ^^ – 2013-05-13 09:27:54

回答

3

假設字母有一個參數化的構造函數,你可以做這樣的一個轉換單元(在Text.cpp文件),

Alphabet Text::alphabet[] = { ("./Alphabet/", "Arial", ".xml"), 
           ("./Alphabet/", "Menlo", ".xml"), 
           ("./Alphabet/", "Times", ".xml") }; 
+0

準確地說 - 爲了避免重複,構造函數可以在內部調用'Load'。 (在你的答案中有一些額外的''''可能想要編輯它們)。 +1 – 2013-05-13 08:17:59

+0

@Luchian,謝謝編輯「)」出來。 – Arun 2013-05-13 08:19:08

+0

@Arun謝謝。我會超載我的'字母'構造函數來完成這個工作。 ^^ – 2013-05-13 09:16:27

1

選項1:所有的靜態變量聲明在類中應該重新定義.cpp(實現文件,在你的情況下Text.cpp),你應該初始化定義中的變量。

選項2:在類「Text」中添加一個新的靜態方法(函數)以初始化靜態成員。 由於您的靜態數據成員在私人部分。在公共部分聲明該方法。