如何在C ++中为前向声明的类型实现一元运算符重载?

以下代码无法在Visual Studio 2008中编译。如果在Bar之前定义Foo1,我如何让它允许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;
}
    
已邀请:
或者你可以:
//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;
}
    
我想出了答案。有两种解决方案:
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()实现保持不变)     

要回复问题请先登录注册