You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数指针声明误读参数类型:结构体参数编译错误问题

问题解析:函数指针声明的语法错误导致类型解析异常

你的问题出在函数指针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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:26:03