函数指针声明误读参数类型:结构体参数编译错误问题
问题解析:函数指针声明的语法错误导致类型解析异常
你的问题出在函数指针MyFunction的声明语法上:
typedef Record (*MyFunction)(const &Record, int);
这行里的const &Record是非法的C++语法——引用的正确声明格式是const 类型&,类型必须放在&的前面,而不是反过来写const &类型。
GCC遇到这种错误语法时,会尝试进行错误的 fallback 解析:它把&和前面的const绑定,然后误将后面的Record当成了某个基础类型的占位符,而你的结构体Record里刚好有int类型的成员,最终就错误解析成了const int&,这就是编译器报错里显示const int&的原因。
修正方法
把函数指针声明里的const &Record改成const Record&即可:
typedef Record (*MyFunction)(const Record&, int);
修正后的完整代码
#include <iostream> struct Record { int x, y; }; // 修正后的函数指针声明 typedef Record (*MyFunction)(const Record&, int); Record add(const Record &rec, int change) { return Record{rec.x + change, rec.y + change}; } Record apply(MyFunction f, const Record &rec, int change) { return f(rec, change); } int main(int argc, char *argv[]) { Record myRec = {3,5}, result = apply(add, myRec, 10); std::cout << result.x << " " << result.y << std::endl; // 输出 13 15 }
内容的提问来源于stack exchange,提问作者Niels Holst
相关产品推荐
相关产品推荐

