2012-08-22 100 views
6

我想添加一个静态常量变量到我的类,这是一个结构的实例。由于它是静态的,我必须在类声明中初始化它。尝试这个代码C++初始化静态常量结构变量

class Game { 
    public: 
     static const struct timespec UPDATE_TIMEOUT = { 10 , 10 }; 

    ... 
}; 

收到此错误:

error: a brace-enclosed initializer is not allowed here before '{' token

error: invalid in-class initialization of static data member of non-integral type 'const timespec'

如何初始化呢?谢谢!

+3

请注意,在C++中几乎不需要详细的类型说明符('struct timespec')。只需编写'timespec'。 – GManNickG

回答

15

在课堂之外的单独定义初始化它,一个源文件中:

// Header file 
class Game { 
    public: 
     // Declaration: 
     static const struct timespec UPDATE_TIMEOUT; 
    ... 
}; 

// Source file 
const struct timespec Game::UPDATE_TIMEOUT = { 10 , 10 }; // Definition 

如果包括在头文件的定义,你可能会得到大约如果这头多重定义的符号链接错误包含在多个源文件中。

+1

我在C++中很漂亮,我听说过,我应该在'classname.h'文件中_declare_类,并在'classname.c'文件中_define_它们。因此,我可以根据需要将'.h'文件包含到我的程序中,但是何时以及如何使用'.c'文件?我正在使用g ++编译器... – Kolyunya

+0

'.c'用于C源文件,不要将它用于C++。对于C++源文件,使用'.cc'或'.cpp'(在Linux上''.cc'通常是首选,'.cpp'通常在Windows上首选,但是两者都可以)。一般来说,一个*声明*表示“这里是某个东西的名字,但这就是我所知道的”(例如一个类或函数的名字)。 A * definition *表示“这里是某个东西的名称和它是什么”,例如类成员,函数体,变量值等。 –

+0

是的,我明白了,谢谢!我在'.h'文件中声明我的类,然后在'.cpp'文件中定义它。然后我在程序中加入'.h'。现在的问题是:我应该如何处理我的'.cpp'文件?我如何使用它?我应该把它写在这里'g ++ main.cpp -o main'吗?我在Linux上使用g ++。 – Kolyunya

0

声明该变量为一个函数内的静态变量,并使该函数返回该变量的引用。