[C++] Объясните плиз в чем ошибка
Попробуй, что ли явно ее неймспейс указать
friend void aa::zz_out(const ZZ& zz);
вдруг поможет.
namespace aa {
class A;
struct A::ZZ;
void zz_out(const A::ZZ& z);
но так нельзя.
А зачем тебе вообще так делать? Какую задачу решаешь?
void aa::zz_out(const aa::A::ZZ& z)
{
}
не помещает тело функции в namespace aa. Ну, чего-то то там у него не переключается, и он её не асоциирует с тем, что обьявлено как friend. Надо писать вот так:
namespace aa {
void zz_out(const A::ZZ& z)
{
}
}
Тем не менее, в первом примере я ввожу объявление функции zz_out в пространство имен aa, это можно увидеть, если внимательно посмотреть. А уже определение пишу отдельно.
А зачем тебе вообще так делать? Какую задачу решаешь?Есть класс, который внутри себя использует объявленный там же enum. Кроме самого класса это тип никому не интересен, т.ч. открывать его не вижу смысла.
Для него я хочу иметь операторы вывода в поток, но я не могу объявить их внутри класса как istream& operator << (istream& s, MyEnum& obj т.к. при объявлении внутри класса операторы << и >> могут иметь всего лишь один параметр (т.е. служить для вывода всего класса в поток и ввода из него). Т.ч. приходится делать friend. Ну может быть еще объявить операторы static получится, и тогда можно будет два параметра передавать, но я так делать не пробовал.
тем не менее мой вариант компилируется, а твой - нет. 8)
тем не менее мой вариант компилируется, а твой - нет. 8)Собственно, в этом и суть вопроса
Ну считай, что это глюк визуалки. В чём проблема, если есть рабочее решение?
Оставить комментарий
erotic
Почему в Vusial Studio 9.0Не компилируется с ошибкой
, а
компилируется нормально? В gcc первый вариант компилируется, поэтому мне кажется, что это косяк визуалки.