[解決済み】GCC: 配列の型が不完全な要素型である
質問
を宣言しました。
struct
という構造体の配列を渡そうとします。
double
の配列、および整数を含む)を関数に渡すことができます。このとき
配列の型は不完全な要素型です。
というメッセージが表示されます。を渡す方法が間違っていたのでしょうか?
struct
を関数に渡すことができますか?
typedef struct graph_node {
int X;
int Y;
int active;
} g_node;
void print_graph(g_node graph_node[], double weight[][], int nodes);
また、私は
struct g_node graph_node[]
しかし、私は同じことを得る。
解決方法を教えてください。
で問題が発生しているのは配列です。
void print_graph(g_node graph_node[], double weight[][], int nodes);
2次元目以降を指定する必要があります。
void print_graph(g_node graph_node[], double weight[][32], int nodes);
あるいは、ポインタにポインタを与えるだけでいいのです。
void print_graph(g_node graph_node[], double **weight, int nodes);
しかし、見た目は似ていても、それらは内部的には全く異なるものです。
C99を使用している場合、可変個数修飾配列が使用できます。 C99規格(セクション§6.7.5.2 Array Declarators)から例を引用してみましょう。
void fvla(int m, int C[m][m]); // valid: VLA with prototype scope
void fvla(int m, int C[m][m]) // valid: adjusted to auto pointer to VLA
{
typedef int VLA[m][m]; // valid: block scope typedef VLA
struct tag {
int (*y)[n]; // invalid: y not ordinary identifier
int z[n]; // invalid: z not ordinary identifier
};
int D[m]; // valid: auto VLA
static int E[m]; // invalid: static block scope VLA
extern int F[m]; // invalid: F has linkage and is VLA
int (*s)[m]; // valid: auto pointer to VLA
extern int (*r)[m]; // invalid: r has linkage and points to VLA
static int (*q)[m] = &B; // valid: q is a static block pointer to VLA
}
コメントでの質問
<ブロッククオート
[...] 私のmain()では、関数に渡そうとしている変数が
double array[][]
では、それをどのように関数に渡せばよいのでしょうか?渡す
array[0][0]
と同じように、互換性のない引数型を与えてしまいます。
&array
と
&array[0][0]
.
あなたの中の
main()
という変数があるはずです。
double array[10][20];
またはかすかに似たようなもの; かもしれない
double array[][20] = { { 1.0, 0.0, ... }, ... };
このようなコードで渡すことができるはずです。
typedef struct graph_node
{
int X;
int Y;
int active;
} g_node;
void print_graph(g_node graph_node[], double weight[][20], int nodes);
int main(void)
{
g_node g[10];
double array[10][20];
int n = 10;
print_graph(g, array, n);
return 0;
}
GCC 4.2 (i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00)) と Mac OS X 10.7.3 上の GCC 4.7.0 でコマンドラインを使ってきれいに(オブジェクトコードに)変換されました.
/usr/bin/gcc -O3 -g -std=c99 -Wall -Wextra -c zzz.c
関連
-
[解決済み] MIPSの2Dアレイ
-
[解決済み] glVertex3fvとglVertex3fの相違点
-
[解決済み】GCC: 配列の型が不完全な要素型である
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】配列に何かを追加する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MIPSで宣言された配列からの印刷
-
[解決済み] Swift Closuresの$0と$1の意味は何ですか?
-
[解決済み] 配列から要素を1つだけ値で削除する方法
-
[解決済み] MATLABで動的配列を作成する方法
-
[解決済み] Rで3D行列をセットアップし、特定の要素にアクセスする
-
[解決済み] Scala:Arrayに要素を追加する最良の方法は何ですか?
-
[解決済み] SwiftでUInt8バイト配列を文字列に変換する方法
-
[解決済み] 選択ソートが安定する理由と不安定な理由
-
[解決済み] Powershellで配列の値をソートする
-
[解決済み】GCC: 配列の型が不完全な要素型である