Что я заявляю следующее определение:декларация функции указателя
void (*bar)(A*){ }; //1
Моя первая мысль была, что я объявляю и определить указатель на функцию и функцию точки указатель на. Но это неправильно, потому что любой вызов bar()
приводит к ошибке сегментации:
#include <iostream>
#include <vector>
#include <memory>
struct A{ };
void foo(A*){ std:cout << "foo" << std::endl; }
void (*bar)(){ };
int main(){
bar();
}
Кроме того, я не могу врезать какое-либо заявление в «определение»:
void (*bar)(A*){ std::cout << "foo" << std::endl };
yeilds ошибка времени компиляции ,
Итак, что означает декларация //1
?
Я думаю, что он означает, что вся строка, а не только '// 1'. Это пустое назначение/инициализация. – CoffeeandCode
Это даже компилируется? Разумеется, это должно быть '(A * a)'? –
@ M.Shaw, вы можете иметь неназванные параметры - совершенно законные. – Alejandro