C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 値型クラスの相互参照


(過去ログ 14 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■4434 / inTopicNo.1)  値型クラスの相互参照
  
□投稿者/ Blue (312回)-(2007/06/18(Mon) 02:26:01)

分類:[C++/CLI] 

C++/CLIで値型のクラスを相互参照するコードを書いているのですが、
コンパイルエラーで困っています。
C#では、値型のクラス(value class)で以下の相互関係を持たすことが出来るのですが、
C++/CLIではどのように記述するればよいのでしょうか。

【C#版】実行可能
public struct First {
public void Print() {
System.Diagnostics.Trace.WriteLine("First: Print");
}
public void OtherPrint(Second second) {
second.Print();
}
}

public struct Second {
public void Print() {
System.Diagnostics.Trace.WriteLine("Second: Print");
}
public void OtherPrint(First first) {
first.Print();
}
}

【C++/CLI版】コンパイル不可
public value struct First {
public:
void Print() {
System::Diagnostics::Trace::WriteLine("First: Print");
}
void OtherPrint(Second second) {
second->Print();
}
};

public value struct Second {
public:
void Print() {
System::Diagnostics::Trace::WriteLine("Second: Print");
}
void OtherPrint(First first) {
first.Print();
}
};

コンパイルエラー:
error C2061: 構文エラー : 識別子 'Second'

他のホームページを参照すると、参照型のクラスなら出来そうらしいとのことですが、
値型では無理なのでしょうか。
以上、よろしくお願いします。

引用返信 編集キー/
■4435 / inTopicNo.2)  Re[1]: 値型クラスの相互参照
□投稿者/ Blue (313回)-(2007/06/18(Mon) 07:06:17)
注意)

ふとみたら、私(わんくま所属)のハンドルで別の人か質問されているようです。
できればハンドルを変えてもらいたいです。


本題ですが、クラスの相互参照になりますので、参照型でなければできないです。

それと、
>void OtherPrint(Second second) {
>second->Print();
>}
Secondは値型なので記述が間違っています。
引用返信 編集キー/
■4436 / inTopicNo.3)  Re[2]: 値型クラスの相互参照
□投稿者/ Blue (314回)-(2007/06/18(Mon) 07:18:30)
2007/06/18(Mon) 08:35:54 編集(投稿者)
訂正

どちらかの引数を参照渡しにして.h(宣言)と.cpp(定義)に分ければ可能でした。

○Second.h

#pragma once

value struct First;

public value struct Second
{
    void Print()
    {
        System::Diagnostics::Trace::WriteLine("Second: Print");
    }
    void OtherPrint(First% first);
};

○Second.cpp

#include "First.h"

void Second::OtherPrint(First% first)
{
    first.Print();
}

○First.h

#pragma once

#include "Second.h"

public value struct First
{
    void Print()
    {
        System::Diagnostics::Trace::WriteLine("First: Print");
    }
    void OtherPrint(Second second)
    {
        second.Print();
    }
};

引用返信 編集キー/
■4567 / inTopicNo.4)  Re[3]: 値型クラスの相互参照
□投稿者/ BBlue (1回)-(2007/06/18(Mon) 21:25:38)
回答ありがとうございます。

valueクラス(値型)でも、
value struct First;
と宣言することで、
void OtherPrint(First% first);
と記述できるのですね。

引数が追跡参照型になってしまうのが残念ですが、勉強になりました。
C#でできて、C++/CLIで出来ないことをはじめて見つけました。

引用返信 編集キー/
■4568 / inTopicNo.5)  Re[4]: 値型クラスの相互参照
□投稿者/ BBlue (2回)-(2007/06/18(Mon) 21:26:23)
いったん解決です。
ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -