Алиас типа функции-члена класса
#include <iostream>
struct S {
using Func = int();
Func f {
return 42;
}
};
int main() {
S s;
std::cout << s.f() << '\n';
}
error: invalid initializer for member function 'int S::f()'
Почему этот код не компилируется? Как сделать, чтобы компилировался?
Ответы (2 шт):
Автор решения: KoVadim
→ Ссылка
f - это не функция, а переменная, которая должна хранить функцию. Поэтому, весь синтаксис и не нравится компилятору. Исправим
#include <iostream>
struct S {
using Func = int();
// нужен указатель на функцию, что бы сохранить
// и добавим туда лямбду, что бы попроще.
Func *f { +[](){return 42;} };
};
int main() {
S s;
std::cout << s.f();
}
Автор решения: user7860670
→ Ссылка
Определение функции сделано неправильно. В такой ситуации оно должно быть вне класса и использовать обычный синтаксис:
#include <iostream>
struct S
{
using Func = int();
Func f;
};
int S::f()
{
return 42;
}
int main()
{
S s;
std::cout << s.f() << '\n';
}