構造体の中にある構造体へのデータ設定について

解決


いな  2006-05-16 02:50:07  No: 61816

お世話になります。
WindowsXP, VC++6.0で開発しております。
以下の文を実行すると、※の所で、「structAからintへキャストできない」とコンパイルエラーになります。
static structB structBData[] = {
        {"test", { 1, 2, (int*)3 }}
};
だと、コンパイルは成功します。
なにが悪いのか、1時間考えておりましたが、解決に到達できませんでした。
ご指導の程、お願い申し上げます。

typedef struct {
        int a;
        int b;
        int * c;
} structA;

typedef struct {
        char * name;
        structA A;
} structB;

static structA structAData    = { 1, 2, (int*)3 };

static structB structBData[] = {
        {"test", structAData}      ←※
};


Blue  2006-05-16 03:07:51  No: 61817

とりあえず
> (int*)3
これまずいですよね?

int*で無理やりキャストしてますが、大丈夫でしょうか?
(C++でいうとreinterpret_cast。)

int n = 3;
int* p = &n;

とはわけが違うのは理解できますか?


いな  2006-05-16 03:14:19  No: 61818

>Blue様
お世話になります。
すいません。サンプルを作るために
何も考えずに、(int*)3という値を使用しました。
実際は、サンプルよりマシな使い方を心がけます。


Black  2006-05-16 03:30:14  No: 61819

ソースに問題があるというより、コンパイラの仕様でしょう。
VC++6.0が構造体の初期化での入れ子に対応していないだけだと思います。

.NET 2003 ではエラーにはなりませんから。


いな  2006-05-16 18:54:07  No: 61820

>>Black様
お世話になります。
コンパイルの仕様とは、思ってもおりませんでした。
謎解きに、時間を費やしてしまうところでありました。
有難うございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加