2016-04-18 7 views
-1

したがって、インスタンス化なしで常にアクセス可能なライブラリである必要があるため、ほとんど静的なものを持つクラスがあります。とにかく、このクラスにはpublic staticメンバ(cfgという構造体)があります。このメンバには、すべての設定パラメータ(静的メソッドで実装されているアルゴリズムの境界と許容範囲がほとんど)が含まれています。上にはconst staticメンバーがあります。これはcfgと同じ型の構造体ですが、パラメータのデフォルト/すべての値を持っています。私のモジュールのユーザは、読み込んだり、部分的に修正したり、cfgとしてそれを適用したり、リファレンスとして使うことができます。C++ <11:静的constクラスメンバを初期化する

私はこの男を初期化することはできません。インスタンス化がなければ(それは静的です)、初期化はコンストラクタでは発生しません(とにかくありません)。クラス内のinitはエラーを返し、cppのinitは宣言の衝突を返します。ここにはどんなやり方がありますか?ここ

まったく同じ挙動を例Iを得るように:

module.h:

#ifndef MODULE_H 
#define MODULE_H 

typedef struct { 
    float param1; 
    float param2; 
} module_cfg; 

class module 
{ 
    public: 
     module(); 
     static module_cfg cfg; 
     const static module_cfg default_cfg; 

}; 

#endif // MODULE_H 

module.cpp:上記と

#include "module.h" 
using namespace std; 

module_cfg module::default_cfg = {15, 19}; 

int main(int argc, char* argv[]) 
{ 
    //clog << "Hello World!" << endl << endl; 

    return 0; 
} 

module::module() 
{ 
} 

エラー:

モジュール.cpp:11:20:エラー:競合する宣言 'module_cfg module :: default_cfg' module_cfg module :: default_cfg = {15、19}; ^ ファイル内にmodule.cpp:8:0: module.h:14:29:エラー: 'module :: default_cfg'に 'const module_cfg module :: default_cfg'という前の宣言があります const static module_cfg default_cfg ; ^ Makefile.Debug:119:ターゲット 'debug/module.o'のレシピが失敗しました module.cpp:11:20:エラー:クラス外の 'const module_cfg module :: default_cfg'宣言が定義されていません[-fpermissive ] module_cfg module :: default_cfg = {15、19};事前に

おかげで、

チャールズ

+0

それはシングルトンの変化のように聞こえるが、次のようになりCPPファイル内のクラスコードと使用例 – user3159253

+1

初期化を確認する方が良いと思います行く道。表示されるエラーを再現する[mcve](/ help/mcve)を表示してください。 – MikeMB

+0

デフォルト設定は '.cfg'に何らかの形で依存する必要がありますか? – user3159253

答えて

1

は、上記のエラーが誤ってCPPファイルで変更可能であることをdefault_cfgを再宣言しているという事実に起因しています。定義へのconstを追加

はそれを修正します。

const module_cfg module::default_cfg = {15, 19}; 
関連する問題