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

发布于 2024-10-11 10:18:30 字数 313 浏览 9 评论 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;
}

The following code does not compile in Visual Studio 2008. How do I get it to allow a unary operator in the Foo1 class that converts it to a Bar, when Foo1 is defined before 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;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

镜花水月 2024-10-18 10:18:30

或者你可以:

//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;
}

Or you could:

//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;
}
执手闯天涯 2024-10-18 10:18:30

我找到了答案。有两种解决方案:

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() 实现保持不变)

I figured out the answer. There are two solutions:

struct Bar;

class Foo1
{
public:
    int val;

    operator struct Bar() const;
};

Or:

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

    operator MyBar() const;
};

(The operator::Bar() implementation remains unchanged)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文