- PR -

構造体参照について (C++/CLI)

投稿者投稿内容
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-11-01 15:53
Form1.hとForm2.hがお互いを参照していますよね。
それがうまく行かない原因だと思います。
Form2.hでは、Form1.hをincludeするのではなく、
ref struct AAA;
とクラスの宣言だけしてみてください。
そうすると、Form2.h内ではAAAのメンバにどんなものがあるか分からない状態なのでForm2コンストラクタの実装をForm2.hに書くことはできません。
form2.cppなどに書いてください。
おしろ
会議室デビュー日: 2007/10/27
投稿数: 14
投稿日時: 2007-11-06 18:42
すみません。回答に気付けませんでした。

回答頂いた方法で色々やってみたのですが、
やはりエラーが出てしまいました。

error「重複したマネージ型に異なる参照状態が指定されています。」

----------------------------------
 Form1.h
----------------------------------
#include "Form2.h"

namespace test {

  // 構造体
  public ref struct AAA
  {
    int a;
    int b;
    int c;
  };

  public ref class Form1 : public System::Windows::Forms::Form
  {
  public:

    Form1(void)
    {
      AAA^ data = gcnew AAA();
      data->a = 1;
      data->b = 2;
      data->c = 3;

      Form2^ fm2 = gcnew Form2( data );
      fm2->ShowDialog();

  (省略)

----------------------------------
 Form2.h
----------------------------------
namespace test {

  ref struct AAA;

  public ref class Form2 : public System::Windows::Forms::Form
  {
  public:
    Form2( AAA^ data );

  (省略)

----------------------------------
 Form2.cpp
----------------------------------
#include "Form2.h"

namespace test {

  ref struct AAA ←←←この宣言を削除すると、AAAがないとエラーになる。
  {
    int a;
    int b;
    int c;
  };

  Form2::Form2( AAA^ data )
  {
   label1->Text = data->a;
  }
}
----------------------------------

[ メッセージ編集済み 編集者: おしろ 編集日時 2007-11-07 01:30 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-11-07 09:18
Form2.cpp には、 Form1.h も include しないといけないんじゃないでしょうか。
おしろ
会議室デビュー日: 2007/10/27
投稿数: 14
投稿日時: 2007-11-07 09:49
やっとコンパイルが通りました!

ご指摘の通り、Form1.h もインクルードしたら、
コンパイルが通りました。

長い間、ありとうございました。
また質問することがあるかと思いますが、
その時は、宜しくお願い致します。

----------------------------------
 Form1.h
----------------------------------
#include "Form2.h"

namespace test {

  // 構造体
  public ref struct AAA
  {
    int a;
    int b;
    int c;
  };

  public ref class Form1 : public System::Windows::Forms::Form
  {
  public:

    Form1(void)
    {
      AAA^ data = gcnew AAA();
      data->a = 1;
      data->b = 2;
      data->c = 3;

      Form2^ fm2 = gcnew Form2( data );
      fm2->ShowDialog();

  (省略)

----------------------------------
 Form2.h
----------------------------------
namespace test {

  ref struct AAA;

  public ref class Form2 : public System::Windows::Forms::Form
  {
  public:
    Form2( AAA^ data );

  (省略)

----------------------------------
 Form2.cpp
----------------------------------
#include "Form2.h"
#include "Form1.h"

namespace test {

  Form2::Form2( AAA^ data )
  {
   label1->Text = data->a;
  }
}

スキルアップ/キャリアアップ(JOB@IT)