0

以下代码无法在 Visual Studio 2008 中编译。当 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

我想出了答案。有两种解决方案:

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 回答