Проблема перегрузки оператора типа - PullRequest
0 голосов
/ 07 февраля 2011

Например, у меня есть два класса A и B, так что для двух объектов a и b я хочу иметь возможность:
A a;
B b;
а = б;
b = a;

для этого я перегружен оператор =, а операторы typecast:

<code>class A{
-snip-
    operator B()const { return B(pVarA); }
};
class B{
-snip-
    operator A()const { return A(pVarB); }
};

но когда я пытаюсь скомпилировать этот код, gcc выдает ошибку:
error: expected type-specifier before 'B'
для линии: operator B()const { return B(pVarA);}

Полагаю, это связано с проблемой курицы и яйца, поскольку класс B определяется после класса A.

Есть ли способ обойти это, все еще используя перегруженные операторы типов? А если нет, то, что может быть лучшим способом для достижения моих целей.

Любая помощь будет оценена. Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 07 февраля 2011

Попробуйте объявить, а затем ввести фактические определения функций позже:

class B;

class A{
-snip-
    operator B()const;
};
class B{
-snip-
    operator A()const;
};

inline A::operator B() const
{
    return B(pVarA);
}

inline B::operator A() const
{
    return A(pVarB);
}
2 голосов
/ 07 февраля 2011

Это должно работать:

class B;

class A{
    operator B()const;
};

class B{
    operator A()const { return A(pVarB); }
};

A::operator B() const { return B(pVarA); }
...