2013-05-13 145 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”中添加一个新的静态方法(函数)以初始化静态成员。 由于您的静态数据成员在私人部分。在公共部分声明该方法。