2016-12-06 4 views
2

で決定:これが正しいとしながら、ベクトルが、私はこのような何かをやろうとしているランタイム

int x=128, y=256; 
std::vector<std::array<float,x*y>> codes; 

明らかにこれは、間違っている:へ

std::vector<std::array<float,128*256>> codes; 

一つの解決策第一の問題点は次のようにマクロを使用することができます

#define x 128 
#define y 256 
... 
std::vector<std::array<float,x*y>> codes; 

しかし、別の解決策がある場合、私は実行時に思っていたし、コンパイル時ではありません。 通知std::arrayを使用する必要はありません。要素の配列(または何でも)がstd::vector必要です。

答えて

3

const使用してみてください:

const int x = 128; 
const int y = 256; 
... 
std::vector<std::array<float,x*y>> codes; 
あなたの最初のコードに問題が xyは定数ではなかったので、コンパイラはそれらの値は、実行時に変更されないという事実に頼ることができなかったという事実だった

とその結果、コンパイル時にテンプレート引数の値を決定できませんでした。

+2

私は 'constexpr'をお勧めしますか?そのようにしてランタイム値から 'x'と' y'を取得しようとすると、 'code'をインスタンス化するのではなく、その時点でコンパイラの不平を取得します。 – user975989

+0

Voilà、それは働いた!ありがとう!とにかく、 'x'と' y'は実行時にユーザによって決定されるので、それらを初期化せずに宣言して(ユーザが値128と256を挿入したときに)それを宣言できますか? – justHelloWorld

+0

@ user975989ここでは 'constexpr'がおそらく良いと同意します。確認する新しいコンパイラは手元にありません。 – alexeykuzmin0

関連する問題