Ошибка не находится на линии D, но с использованием спецификации в сцепления (The extern "C"
)
В соответствии с разделом 7.5.4 :
A linkage-specification shall occur only in namespace scope
Это означает, вы можете перенести свои функции в глобальное пространство имен, которое довольно часто используется для функций C:
typedef int (*pfun)(int); // line a
extern "C" void foo(pfun); // line b
extern "C" int g(int); // line c
int main()
{
foo(g); // line d
return 0;
}
Или внутри именованного пространства имен:
namespace c_funcs
{
typedef int (*pfun)(int); // line a
extern "C" void foo(pfun); // line b
extern "C" int g(int); // line c
}
int main()
{
c_funcs::foo(c_funcs::g); // line d
return 0;
}
... но не в область видимости функции, как ваш код делает.
спецификации Навеска гнездо, так что вы могли бы даже сделать что-то странное, как это, чтобы дать foo
и g
"C" связь:
typedef int (*pfun)(int); // line a
extern "C" int main()
{
void foo(pfun); // line b
int g(int); // line c
foo(g); // line d
return 0;
}
'ехЬегп "C" Int х (INT)' и 'Int х (Int) 'не одни и те же типы. (C++ 11, 7.5/1) – cHao