2016-05-05 7 views
0

配列はconst intを初期化する必要があることを理解しています。私は必要に応じてこれらの番号を簡単に変更できるようにしたいので、これをメインにしたいと思います。const intの値を渡して配列を初期化する関数

const int magicWordCount = 10; 
compareWords(magicWordCount); 

この関数の宣言は次のとおりです。

void compareWords(const int); 

定義:私はこれを行うと

void Words::compareWords(const int magicWordCount) 
{ 
std::string magic[magicWordCount] = {}; 
convertToStringArray(magicBuffer, magicBufferLength); 
} 

、定義における "magicWordCountは" 私に言ってインテリセンスによって強調され、表現一定の値を持たなければなりません。私は値が一定でないところで混乱します。思考?

+0

magicWordCountは定数ではありませんconstアクセスを持つパラメータ(または変数)で、関数への呼び出しごとに異なる数値を取ることができますが、関数内の変更から保護されています。実行時に配列を作成する標準的な方法は、std :: vector(サイズを変更する場合)またはstd :: array(同じサイズのままにする場合)を使用することです。 – T33C

答えて

6

magicWordCountconstですが、コンパイラが知っている限り、それは実行時定数であり、コンパイル時定数ではありません。つまり、magicWordCountの値がWords::compareWordsの内部で変更されないようにすることができます。

これは、特定のサイズの配列を宣言するには不十分です。コンパイラ(およびintellisense)はコンパイル時定数を要求しています。 magicWordCountではなく、コンパイル時定数です。

あなたは、配列の代わりにstd::vectorを使用することで、この問題を回避することができます

std::vector<std::string> magic(magicWordCount); 

は、上記にもconstせずに動作します。

+0

ベクターを使用することはできません。これは割り当てのためのものです。私はこのように割り当てを行う必要はありません、私はちょうどそれをメインに置くことによってconstの簡単にアクセス可能にするためのきちんとした機能だろうと思った。 – yorTsenoJ

+0

私はmagicWordCountを次のように使って宣言しようとしました:constexpr int magicWordCount = 10;しかし、私はまだ同じエラーが発生しています。私はコンパイル時定数に慣れていません。 :( – yorTsenoJ

+2

値を渡してコンパイル時定数にすることはできません。関数を呼び出すたびに、10と100を使用し、実行時に 'magicWordCount'の値を変更することができます。 – user4581301

0

Wordクラスのヘッダーの上に、クラスの定義の上にmagicWordCountを配置できます。それでも簡単にそこにアクセスできます。関数のパラメータとして渡す必要はありません。

+0

ヘッダーファイル内の変数の定義は通常、問題のレシピです – NathanOliver

-4

配列は、それが(コンパイル前に定義)constの大きさを持っていなかった場合、それは例えばバッファオーバーフロー攻撃 のconst int型magicWordCount = 1000 作ることを意味しているローカルスコープ で店ですので、それは、配列 に関する問題であり、文字列のサイズは、[]絶対ので、このような状況であなたは、配列が本当に悪い行うので、ポインタ で代わりに配列を使用せず、決して、代わりに私の意見表明のための

string* str = (string*)malloc(sizeof(string*) * a); 
for(int i = 0; i < a; i++){str[i] = "";} 

ともにポインタを使用する場合がありますリターンポイント をカバーしますパフォーマンスと奇妙なロジックを再ad/write

+0

しないでください。あなたの悪夢でこれをしないでください。 – user4581301

+0

ああ男、それは面白いです... – yorTsenoJ

+0

しかし、なぜですか?私はいつもポインタを使用しています –

関連する問題