TL; DR; 問題は、関数のプロトタイプを書くのを忘れてしまったことです。私はArduinoのためのテトリスクローンを作成するtypedefed構造体の2次元配列を関数引数として渡す
:
void tt_drawFigure(tt_figure figure);
本文:これを追加すると、問題を修正しました。私の実装で は、私は、画面上の点を表すstruct
有する:
struct tt_point
{
int x;
int y;
};
各図は、その回転「snaphots」または「フレーム」の配列です。各フレームはtt_points
の配列で、Figureをtt_points
の2次元配列にしています(あなたは醜いかもしれませんが、デザインに関する問題ではありません)。
この2次元配列をtypedefして関数に渡したいと思います。ここで私が持っているtypedefがある:
typedef tt_point tt_figure[4][4];
そして、 'T' フィギュア:私は関数に数値を渡すしようとすると、
tt_figure tt_T = {
{{0,0}, {0,1}, {0,2},
{1,1}},
{{0,1},
{1,0}, {1,1},
{2,1}},
{{0,1},
{1,0}, {1,1}, {1,2}},
{{0,0},
{1,0}, {1,1},
{2,0}}
};
問題は始まる:
void tt_drawFigure(tt_figure figure) { ... }
エラーは:
Tetris:20: error: variable or field 'tt_drawFigure' declared void
Tetris:20: error: 'tt_figure' was not declared in this scope
どのように私はrewr関数にtt_figure
を渡す宣言はありますか?
P.S.私はvoid*
として数字を宣言することによって、それが働いて作られ、その後、4×4の配列にキャスト:
void tt_drawFigure(void* figure)
{
tt_point * fig = ((tt_point(*)[4]) figure)[frame_index];
...
}
しかし、よりよい方法があるはずです。
更新。あなたは、ペーストをコピーしてコンパイルしようとすることができる コード:
struct tt_point
{
int x;
int y;
};
typedef tt_point tt_figure[4][4];
tt_figure tt_T = {
{{0,0}, {0,1}, {0,2},
{1,1}},
{{0,1},
{1,0}, {1,1},
{2,1}},
{{0,1},
{1,0}, {1,1}, {1,2}},
{{0,0},
{1,0}, {1,1},
{2,0}}
};
void setup()
{
}
void loop()
{
}
void tt_drawFigure(tt_figure figure)
{
}
私はいくつかの括弧がないと感じています。実際に配列を適切にフォーマットする必要があります。 –
回避策は醜いだけではなく、非常に悪いことです。それが唯一の最良の方法でない限り、 'void *'を使用しないでください。ほとんどの時間はnoneです。 – Olaf
もう一度:[mcve]が見つかりません。次! – Olaf