- ベストアンサー
構造体のextern方法
C++のビギナーなのですが、 普通の変数、配列のexternはできているのですが、 構造体をexternができずに困っています。 2時間ほど調べまわったのですが、 typedefを使わなければならない(?) とか 構造体は変数なんかと違い、特別なやり方をしないとダメらしい事までは解ったのですが、 実際動くやり方を見つけきれませんでした; 方法(手順)や、解説サイトなどをご存知でしたら、教えて頂けると幸いです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まさか, 「実体を定義していない」というオチはないよなぁ....
その他の回答 (3)
構造体の定義そのものをexternとかしてるんじゃないですよね 何に対してexternを付けられるのかわかってますか
お礼
ご回答ありがとうございます。
補足
すみません、 「構造体の配列」にexternをつけるとエラーが出てしまいます。 extern struct panel panels[35]; このようにすると error LNK2001: 外部シンボル ""struct panel * panels" (?panels@@3PAUpanel@@A)" は未解決です。 error LNK1120: 外部参照 1 が未解決です。 とエラーが出てしまいます。
- asuncion
- ベストアンサー率33% (2127/6289)
>普通の変数、配列のexternはできているのですが、 >構造体をexternができずに困っています。 どんなソースコードを書いたときに、 普通の変数や配列ではできたことが 構造体ではできないのでしょうか? 構造体だからといって特別扱いする必要はないです。
お礼
「構造体の配列」にexternをつけるとエラーが出てしまいます。 extern struct panel panels[35]; このようにすると externが無ければ正常に動くのですが、 error LNK2001: 外部シンボル ""struct panel * panels" (?panels@@3PAUpanel@@A)" は未解決です。 error LNK1120: 外部参照 1 が未解決です。 とエラーが出てしまいます。
- Tacosan
- ベストアンサー率23% (3656/15482)
別に構造体が「特別なやり方をしないとダメ」ということはないです. もちろんその変数の型がわからないといけないんですが, ちゃんと構造体を定義しておけば extern できます. 例えば, ヘッダに struct some_struct { int member1; double member2; char *member3; }; extern some_struct a_struct; とあれば, これを #include したファイルで a_struct を使うことができます.
お礼
構造体そのものはそのままで使えたのですね。 ありがとうございます。
お礼
すみません、そのまさかでした; 値を入れる関数を通過したあとでexternしたら普通にできました; externする場合、一番初めに宣言しなければならないと思い込んで 値入れられないけどタグ名付けたし、ここで呼ぶしか・・等と考えてしまって やらかしてたみたいです。 orz そして 構造体 extern のキーワードで検索して見て回ってたサイトは きっと別の情報だったのですね・・。 お騒がせして申し訳ありませんでした。 無事解決できました。有難うございました。 っ_ _)っ