1

私は2つのクラスを持っています:testClasscastClass:

class testClass
{
public:
    int field1;
    int field2;

    testClass(int f1, int f2) : field1(f1), field2(f2) {}
};

ref class castClass
{
    int i;
    int j;
public:
    castClass(int i, int j) : i(i), j(j) {}

    explicit static operator testClass (castClass% c)
    {
        return testClass(c.i, c.j);
    }
};

私がしようとすると:

castClass cc(1, 2);
testClass i = (testClass)cc;

それはうまくコンパイルされます。

しかし、次のようにキャストしようとすると:

castClass% c = castClass(1, 2);
testClass j = (testClass)c;

コンパイラはエラーをスローします:

Error   1   error C2440: 'type cast' : cannot convert from 
'castClass' to 'testClass'

なぜ2番目のケースが間違っているのですか?

4

1 に答える 1

2

castClassは ref クラスであるため、その型のオブジェクトを参照する通常の方法は with^です。これを試してみてください。うまくいくはずです。

ref class castClass
{
    int i;
    int j;
public:
    castClass(int i, int j) : i(i), j(j) {}

    explicit static operator testClass (castClass^ c)
    {
        return testClass(c->i, c->j);
    }
};

castClass^ cc = gcnew castClass(1, 2);
testClass i = (testClass)cc;

castClass^% c = gcnew castClass(1, 2);
testClass j = (testClass)c;
于 2012-05-09T18:42:08.627 に答える