C++/CLIで相互参照されたクラス間のgcnewの使用

huahi11115 640 評価のポイント
2026-10-06T09:19:59.0566667+00:00

C++/CLI で以下の様なコードを記述しています。

2つのクラスが相互に参照する構造です。今まで、このような構造になった時はプロトタイプ宣言を書いてソースの最後にメソッドの本体を記述するという方法で回避してきましたが、今回はgcnewを使っているため、従来の様な回避方法が使えません。

コンパイルが通るようにする方法を教えて下さい。

AIにも質問しましたが、有効な回答が得られませんでした。

また、設計が悪いと愚弄する回答はやめて下さい。

public ref class classA {
public:
	//static classB ^clb = gcnew classB(); //後方参照のため、数多くのコンパイルエラーが発生
	static const int i1 = 10;
	static int p0() { return i1; }
};

public ref class classB {
public:
	static classA^ cla = gcnew classA();
	static const int i2 = 20;
	static int p0() { return i2; }
};
開発者テクノロジ | C++
開発者テクノロジ | C++

C プログラミング言語の拡張機能として作成された高レベルの汎用プログラミング言語。低レベルのメモリ操作機能に加えて、オブジェクト指向、汎用、関数型の機能を備えています。

0 件のコメント コメントはありません

質問作成者が受け入れた回答
gekka 14,551 評価のポイント MVP ボランティア モデレーター
2026-10-06T09:48:31.4733333+00:00
//前方宣言
ref class classA;
ref class classB;

public ref class classA {
	static classA();
public:
	static classB^ clb;
	static const int i1 = 10;
	static int p0() { return i1; }
};

public ref class classB {
public:
	static classA^ cla = gcnew classA();
	static const int i2 = 20;
	static int p0() { return i2; }
};


//初期化の部分を後に定義
static classA::classA(){
	classA::clb = gcnew classB();
}

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。

0 件の追加の回答

並べ替え方法: 最も役に立つ

お客様の回答

質問作成者は回答に "承認済み"、モデレーターは "推奨" とマークできます。これにより、ユーザーは作成者の問題が回答によって解決したことを把握できます。