開発者テクノロジ | C++
C プログラミング言語の拡張機能として作成された高レベルの汎用プログラミング言語。低レベルのメモリ操作機能に加えて、オブジェクト指向、汎用、関数型の機能を備えています。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
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 プログラミング言語の拡張機能として作成された高レベルの汎用プログラミング言語。低レベルのメモリ操作機能に加えて、オブジェクト指向、汎用、関数型の機能を備えています。
//前方宣言
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();
}