Как реализовать перегрузку унарного оператора для объявленного вперед типа в C ++? - PullRequest
0 голосов
/ 13 января 2011

Следующий код не компилируется в 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;
}

Ответы [ 2 ]

2 голосов
/ 13 января 2011

Или вы могли бы:

//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;
}
0 голосов
/ 13 января 2011

Я разобрался с ответом.Есть два решения:

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 () остается неизменной)

...