0

次のコードはVisualStudio2008ではコンパイルされません。Foo1がBarの前に定義されている場合、Foo1クラスの単項演算子がBarに変換できるようにするにはどうすればよいですか?

class Foo1
{
public:
    int val;

    operator struct Bar() const;
};

struct Bar
{
    int val;
};

// This does not compile
Foo1::operator Bar() const
{
    Bar x;
    x.val = val;
    return x;
}
4

2 に答える 2

2

または、次のことができます。

//forward declaration of Bar
struct Bar;

class Foo1
{
public:
    int val;

    operator Bar() const;
};

struct Bar
{
    int val;
};

//Now it should compile
Foo1::operator Bar() const
{
    Bar x;
    x.val = val;
    return x;
}
于 2011-01-13T09:13:35.373 に答える
0

私は答えを見つけました。2つの解決策があります:

struct Bar;

class Foo1
{
public:
    int val;

    operator struct Bar() const;
};

または:

class Foo1
{
    typedef struct Bar MyBar;
public:
    int val;

    operator MyBar() const;
};

(operator :: Bar()の実装は変更されません)

于 2011-01-13T00:48:40.367 に答える