【问题标题】:error: invalid in-class initialization of static data member of non-integral type 'const char[]'错误:非整数类型“const char[]”的静态数据成员的类内初始化无效
【发布时间】:2013-12-15 07:22:07
【问题描述】:

我的私人班级成员收到大量错误。请帮我解决它们。

错误:在“{”标记之前不允许使用大括号括起来的初始值设定项

错误:非整数类型'const char []'的静态数据成员的类内初始化无效

错误:“LETTERS_ARR”尚未声明

错误:“LETTERS_ARR”尚未声明

错误:在 '+' 标记之前需要 ',' 或 '...'

错误:ISO C++ 禁止初始化成员“SNTNC_SMLRTY_THRSHLD_DEFAULT”

错误:将“SNTNC_SMLRTY_THRSHLD_DEFAULT”设为静态**

private:
    std::vector<std::string> files_vec; 
    std::vector<std::string> get_file_sntncs(std::fstream&);
    std::vector<std::string> get_sntnc_wrds(const std::string&);
    double sntnc_smlrty_qtnt(std::vector<std::string>, std::vector<std::string>);
    static const char LETTERS_ARR[] = {"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'."};
    static const std::set<char> LETTERS_SET(LETTERS_ARR, LETTERS_ARR + sizeof(LETTERS_ARR)/sizeof(char));
    double sntnc_smlrty_thrshld; 
    static const double SNTNC_SMLRTY_THRSHLD_DEFAULT = 0.5; 

【问题讨论】:

    标签: c++


    【解决方案1】:

    在 C++ 中,不允许为非整数非枚举类型的静态成员提供类内初始化程序。对于此类成员,初始化程序是在定义时提供的,而不是在声明时提供的。

    或者,正如@juanchopanza 在 cmets 中指出的那样,您可以将静态成员声明为 constexpr 而不是 const(假设您使用的是 C++11 编译器),这将允许您在类中提供就像您在原始代码中所做的那样,为此类成员创建初始化程序。

    【讨论】:

    • 除非他们是constexpr,IIRC。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多