Я узнал, что для создания функции-друга функция-член должна быть явно объявлена в прилагаемой области видимости или принять аргумент своего класса. Тем не менее, это, похоже, предостережение, я не смог понять. Почему звонок на f1(99)
не работает?
class X {
public:
X(int i) {
std::cout << "Ctor called" << std::endl;
}
friend int f1(X&);
friend int f2(const X&);
friend int f3(X);
};
int f1(X& a) {
std::cout << "non-const called" << std::endl;
}
int f2(const X& a) {
std::cout << "const called" << std::endl;
}
int f3(X a) {
std::cout << "object called" << std::endl;
}
int main() {
f1(99);
f2(99);
f3(99);
}