2012-08-22 22 views
6

構造体のインスタンスである静的定数変数をクラスに追加しようとしています。それは静的なので、私ははクラス宣言でそれを初期化する必要があります。私はそれをどのように初期化しないC++静的const構造体変数の初期化

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'

:このエラーを取得、このコード

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

    ... 
}; 

をしようとすると?ありがとう!

+3

精巧な型指定子( 'struct timespec')は、C++ではほとんど必要ないことに注意してください。 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'ファイルでクラスを宣言し、' classname.c'ファイルで_define_する必要があります。そして、私は必要に応じて '.h'ファイルを自分のプログラムに何度も含めることができますが、' .c'ファイルをいつどのように使うのですか?私はg ++コンパイラを使用しています... – Kolyunya

+0

'.c'はCソースファイル用ですが、C++用には使用しないでください。 C++ソースファイルには '.cc'または' .cpp'を使用します(Linuxでは '.cc 'が一般的に好まれますが、Windowsでは' .cpp'が一般的に好まれますがどちらでも可能です)。一般的に、*宣言*は「ここには何かの名前がありますが、それは私が知っているすべてのものです」(例えば、クラスや関数の名前)です。 A *定義*は「ここには何かの名前とそれが何であるか」と言っています。クラスメンバ、関数本体、変数値など –

+0

はい、私はこれを、ありがとう! '.h'ファイルに自分のクラスを宣言し、それを' .cpp'ファイルに定義します。次に私のプログラムに '.h'を含めます。今質問:私の '.cpp'ファイルで何をすべきか?どうやって使うの?ここで 'g ++ main.cpp -o main'のどこかに書きますか?私はLinux上でg ++を使用しています。 – Kolyunya

0

関数内で変数を静的変数として宣言し、その関数が変数への参照を返すようにします。

関連する問題