LINUX.ORG.RU

Напомните, почему из методов класса нельзя вызывать одноимённые функции?

 , ,


1

2
inline std::string to_str(int x){
    return "x";
}


class A {
public:
    std::string to_str(){
        return to_str(10); //too many arguments to function call, expected 0, have 1
    }
};
★★★★★

Последнее исправление: next_time (всего исправлений: 1)

Ответ на: комментарий от next_time

как раз наоборот, using в этом смысле гораздо более деструктивна

Чем? Это явное действие с определённым поведением в случае конфликта символов.

и тогда функция класса дожна перекрывать внешюю, по общему правилу, так же как её параметры и члены перекрывают внешние переменные

Так по общему правилу оно и перекрывает всё, а не выборочно. Ведь переменная, совпадающая с именем функции из внешнего пространства имён, скрывает ту функцию. Компилятор здесь не делит символы по типам, а обрабатывает всё одинаково. И тут стоит вспомнить, что переменные тоже можно вызывать как функции.

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от xaizek

Чем? Это явное действие с определённым поведением в случае конфликта символов.

using namespace SMTH1; Поменял на SMTH2 и привет.

next_time ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.