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

使用decltype检测Polygon类scale方法类型时出现未声明错误求助

错误原因及修正方法

核心问题

编译报错的原因很直接:scale是Polygon类的非静态成员函数,仅属于Polygon类的作用域。你在main函数的全局作用域中直接写decltype(scale),编译器会在全局范围内查找名为scale的实体,自然找不到,因此抛出未声明的错误。

正确写法

要获取成员函数的类型,需要满足三个要点:

  1. 用类名限定成员函数的作用域:Polygon::scale
  2. 取成员函数的地址(decltype获取成员函数类型时,必须通过成员函数指针的形式)
  3. 非静态成员函数的类型格式为 返回值类型 (类名::*)(参数列表),而非你写的void (Polygon*,double)——后者是对成员函数调用时隐式传递this指针的逻辑模拟,但不是C++中成员函数指针的实际类型。

修正后的判断代码如下:

if(!std::is_same<decltype(&Polygon::scale), void (Polygon::*)(double)>::value){
    cout<<'p';
}

补充说明

如果想通过对象实例推导类型,也可以写成decltype(&decltype(polygon)::scale),效果和decltype(&Polygon::scale)一致,但直接使用类名的写法更清晰直观。

内容的提问来源于stack exchange,提问作者lelumpolelum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:25:12