dポイントプレゼントキャンペーン実施中!

const double A[2] = {1.0, 2.0};

double B[2][3] = {
{ A[0], A[1], 0.0 },
{ 0.0, 0.0, 0.0 }};

このようなプログラムをコンパイルしようとすると、
初期化子の要素が定数ではありません
というエラーが出てしまい困っています。どのように解決したらいいでしょうか。
OSはlinux、コンパイラgccです。

A 回答 (3件)

>配列の中に配列を入れたい


何か誤解を招く表現ですね。
「配列の中のある要素の初期値として、別の配列の要素を指定したい。」と言う意味でしょうか?
配列の初期値ですが、変数の記憶域が静的な場合は配列に限らず、定数しか指定できません。
動的領域の場合は変数の内容を初期値にすることは論理的に可能ですが、コンパイラによっては
静的な場合と一緒にしてしまっている場合があります。恐らく後者なのだと思います。
しょうがないので、配列生成後に代入するしかないでしょう。そもそも動的領域に初期値と
いうのは本来できないことなのです。実際に生成されるコードは変数の確保→値の代入の順に
なっており、明示的にソースコードを書くか書かないかの違いしかありません。
    • good
    • 0

初期化でするからでは?


double B[2][3];
B[0][0] = A[0];
B[0][1] = A[1];
...
とかでは駄目なの?
    • good
    • 0

デファインシンボルじゃ駄目ですか?


#define A1  1.0
#define A2  2.0

const double A[2] = {A1, A2};

double B[2][3] = {
{ A1, A2, 0.0 },
{ 0.0, 0.0, 0.0 }};

同じ環境無いんで確認できないけど・・・・・
(VCでやったら元々のでも通ってしまった)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています