※ ChatGPTを利用し、要約された質問です(原文:vc2005.net 構造体の宣言について)
VC2005.NETで構造体を宣言する方法
このQ&Aのポイント
Visual Studio(VC++) .NET 2005マネージで構造体を作る方法を教えてください。
クラス内で構造体を宣言しようとするとエラーが出てしまいます。
配列の宣言はうまくできるのですが、なぜ構造体がうまくいかないのでしょうか。
visual studio(VC++) .net 2005マネージを練習しています。
クラス内に構造体を作りたいのですがうまくいきません。
public ref class Form1:~~
上記クラス中で
public:
static STRUCTTEST test = gcnew STRUCTTEST;
上記のように記述したところ
'^'この間接指定を型STRUCTTESTで使用出来ません。
と出ます。
マネージだから'^'で良いのではないでしょうか。
^をとったところ
testをマネージtestslusion::Form1のメンバとして定義できません。混合型はサポートされません。
と出ます。マネージでは^が必要なはずなのでこれは分かるのですが・・・。
gcnewをnewにしても^を*にしてもコンパイルエラーが出ます。
これは何故でしょうか。
ちなみに配列を
static array<int>^ test = gcnew array<int>(10);
このように記述する事は分かりました。
お礼
ありがとうございます。 キーワードを変えて調べてみました。 アンマネージド(unmanaged ネイティブとも) クラスは class 構造体はstruct マネージド(managed) クラスはref class 構造体は value class ということは、私の場合は定義を typedef value class{ BYTE a : 1 ; //ビットフィールド ~~ /* 構造体の中の配列は下記でよい? */ BYTE abc[10];//配列 /* 仮に駄目ならこちら */ array<BYTE>^ abc = gcnew array<BYTE>(10);//1 static array<BYTE>^ abc = gcnew array<BYTE>(10);//1 }STRUCTTEST; このようにする。 実態を作るときは下記のようにする。 static STRUCTTEST test = gcnew STRUCTTEST; 構造体配列なら下記のようにする。 static array<STRUCTTEST>^ test = gcnew array<STRUCTTEST>(10); ******************************* //typedefを使わない場合の記述はこう? value struct STRUCT TEST{ }; //上記の実体を作る static value struct STRUCTTEST test = gcnew STRUCTTEST; ******************************* このような感じでよいでしょうか?今手元に環境が無いため未確認です。