如何在类中声明inline static成员?VS2019使用inline报错如何解决
问题原因
出现该报错的核心原因有两类:
- 你的VS2019项目默认启用的C标准低于C17:
static inline修饰类内静态成员变量是C17才正式支持的语法,低版本C标准下编译器无法识别该语法规则,可能误将该变量判定为非静态成员触发报错。 - 代码书写不规范:要么是
static inline int p_iMaxID = 0;这行代码写在了类的成员函数/构造函数内部,而非类声明的直接作用域中;要么是static关键字存在拼写错误,导致编译器判定该成员为非静态成员。
修复方案
方案1:启用C++17及以上标准(推荐)
- 首先确认代码书写位置正确,示例如下:
// 类声明头文件 class YourClass { // 正确位置:类声明内部,不属于任何函数代码块 static inline int p_iMaxID = 0; // 其他类成员定义... };
- 配置VS2019项目的C++标准:
- 右键点击项目名,选择「属性」打开项目属性页
- 依次进入「配置属性 -> C/C++ -> 语言」栏目
- 把「C++ 语言标准」项修改为
ISO C++17 标准 (/std:c++17)或更高版本,保存配置后重新编译即可。
方案2:兼容低版本C++标准
如果项目要求不能升级到C17,可改用C17之前的静态成员定义规则:
- 在类声明中仅保留静态成员的声明,去掉
inline和初始化赋值:
// 头文件类声明内 class YourClass { static int p_iMaxID; // 仅声明 // 其他类成员定义... };
- 在对应的.cpp实现文件中,类外定义并初始化该静态成员:
// .cpp实现文件内 int YourClass::p_iMaxID = 0;
内容的提问来源于stack exchange,提问作者userunkn4wn
相关产品推荐
相关产品推荐

