встроенная функция друга c ++ с тем же именем, что и переменная-член

Это удивило меня. Это работает:

struct foo {
int x;
friend int x(foo f) { return f.x; }
friend int y(foo f);
};

int y(foo f) { return x(f); } // no problem

Но это ошибка:

struct foo {
int x;
friend int x(foo f) { return f.x; }
friend int y(foo f) { return x(f); } // error: invalid use of foo::x data member
};

Почему не разрешены оба этих варианта?

5

Решение

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

Во втором примере x имеет два значения в этой области: глобальная функция друга и переменная (которая, вероятно, скрывает глобальную функцию друга).

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]