お世話になります。
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} ←※
};
とりあえず
> (int*)3
これまずいですよね?
int*で無理やりキャストしてますが、大丈夫でしょうか?
(C++でいうとreinterpret_cast。)
int n = 3;
int* p = &n;
とはわけが違うのは理解できますか?
>Blue様
お世話になります。
すいません。サンプルを作るために
何も考えずに、(int*)3という値を使用しました。
実際は、サンプルよりマシな使い方を心がけます。
ソースに問題があるというより、コンパイラの仕様でしょう。
VC++6.0が構造体の初期化での入れ子に対応していないだけだと思います。
.NET 2003 ではエラーにはなりませんから。
>>Black様
お世話になります。
コンパイルの仕様とは、思ってもおりませんでした。
謎解きに、時間を費やしてしまうところでありました。
有難うございました。
ツイート | ![]() |