2017-12-06 5 views
0

私はこれをquestionと見ましたが、そこに提供されている解決策では問題は解決しません。でも、これは誤りC++ 11:配列バインドはトークンの前に整数定数ではありません

num_instancesを上げる//

static int num_instances; 
std::vector<SomeClass::FunctionWithinTheClass> *mem[num_instances]; 

SomeClass::FunctionWithinTheClass *mem[num_instances];は、設定ファイルを読み込むことによって得られます。

私が手にエラーがある: array bound is not an integer constant before ‘]’ token

num_instancesがコンパイル時に固定されているので、これは奇妙です。

+0

あなたはコンパイル時に設定ファイルを読んでいますか? – Mat

+0

いいえ、設定ファイルは実行時に読み込まれます。 – tandem

+0

それから値は実行時に決定されますね。 – Mat

答えて

1

the value num_instances is obtained by reading a configuration file

... the config file is read at runtime

num_instances、その値実行時で決定さ可変であることを意味します。

This is strange because the value num_instances is fixed at compile time

いいえ、あなたは自分自身と矛盾しています。

実行時にconfigからロードされた場合、コンパイル時には分かりませんでした。コンパイル時に既知の場合は、実行時にconfigからロードしません。


コンパイル時にnum_instancesを修正できない場合は、使用する配列が間違っています。ちょうど

に変更してください
// like an array whose size can be set at runtime ... 
std::vector<std::vector<SomeClass::FunctionWithinTheClass>> mem; 

void configure() { 
    size_t num_instances = loadNumInstancesFromConfig(); 
    mem.resize(num_instances); 
} 
+0

なぜ 'std :: vector tandem

+0

達成しようとしていたことは何でしたか?何が理にかなっていますか?テンプレートのパラメータリストの '<...>'の括弧にマッチすると、どのように読み込まれますか? – Useless

+0

私はそれをよく読んで、新しいエラーにつながります: 'メンバーのサイズ変更の要求は、ポインタ型です(おそらく、あなたは' - '' – tandem

0

値が固定されていても、コンパイル時定数ではありません。動的なサイズのコンテナが必要な場合は、stlコンテナを使用することをお勧めしますか?

1

おそらく、コンパイル時には固定されていますが、「整数定数」は専門用語であり、static int変数はこれらの要件を満たしていません。

代わりにstatic const intを使用してください。これは動作します:

static const int num_instances = 5; 

ただし、これは私には定数のように遠隔操作音はありません... num_instancesは、構成ファイルから読み取られていることに言及します。この場合、代わりにstd::vectorまたは他の動的サイズの配列を使用する必要があります。

関連する問題