zoukankan      html  css  js  c++  java
  • error: non-static data member ‘value’ declared ‘constexpr’

    ttt.cc:6:24: error: non-static data member ‘value’ declared ‘constexpr’
      constexpr int value=a+b;
                            ^
    ttt.cc: In function ‘int main()’:
    ttt.cc:14:30: error: invalid use of non-static data member ‘Add_<2, 3>::value’
      constexpr int x1=Add_<2,3>::value;
                                  ^~~~~
    ttt.cc:6:24: note: declared here
      constexpr int value=a+b;

    源码

    #include <iostream>
    using namespace std;
    
    template<int a,int b>
    struct Add_{
            constexpr int value=a+b;
    };
    
    template<int a,int b>
    constexpr int Add=a+b;
    
    int main(void)
    {
            constexpr int x1=Add_<2,3>::value;
            cout<<"template 1: "<<x1<<endl;
    
            constexpr int x2=Add<3,4>;
            cout<<"template 2: "<<x2<<endl;
    
            return 0;
    }

    constexpr int value改成constexpr static int value就可以了

    因为类的非静态成员是在类被实例化之后才被创建出来。也就是说当程序运行起来,创建这个类的时候,这个类里面的非静态成员才会被初始化。而constexpr关键字表明函数在编译期就被调用,变量在编译期就得到明确结果,所以constexpr只能修饰于类的静态成员。

    所以要在类中声明元函数,一定要限定成静态类型成员。

    无情的摸鱼机器
  • 相关阅读:
    抓取国家地区基础数据
    h264
    h.264
    vlc 推送rtsp视频流不能播放
    花生壳tcp内网端口映射
    make 安装时指定目录
    ubuntu安装vsftpd
    vsftpd命令
    vim删除某一列
    linux打开防火墙
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/15001385.html
Copyright © 2011-2022 走看看