提问人:couscous 提问时间:10/21/2023 最后编辑:JaMiTcouscous 更新时间:10/22/2023 访问量:56
为什么 LinuxGCC 允许类内初始化非常量静态成员,而 MinGW 不允许?
Why does LinuxGCC allow in-class initialization of non-const static member, but MinGW doesn't?
问:
我和一位朋友正在做一个学校项目,我们应该声明一个静态类成员,基本上是类对象的计数器,它为每个对象分配一个 ID。
我在 Ubuntu 上使用 Linux GCC,而我的朋友在 Windows 上使用 MinGW。我们都使用 Eclipse IDE。
Linux 机器使用 gcc 11.4.0。GCC C++ 编译器的方言在两台计算机上都设置为 ISO C++17。minGW 的 gcc 版本应该是 13.1.0(根据 中的某些文件)。minGW.zip
我的源代码如下。在我的 Linux 机器上运行它有效。尝试在 Windows 上运行它会返回错误:“ISO C++ 禁止类内初始化非常量静态成员 'Fahrzeug::p_iMaxID'”。为什么编译器之间存在差异,如何在不编写另外 10 行代码的情况下修复错误?(如果可能的话)。
Fahrzeug.h
#ifndef FAHRZEUG_H_
#define FAHRZEUG_H_
#include <iostream>
#include <string>
class Fahrzeug {
public:
inline Fahrzeug(); //Default-Konstruktor
inline Fahrzeug(std::string p_sName);
inline ~Fahrzeug();
std::string getName() {return p_sName;};
int getID() {return p_iID;};
private:
std::string p_sName = "";
static inline int p_iMaxID = 1;
const int p_iID = p_iMaxID++;
};
#endif /* FAHRZEUG_H_ */
Fahrzeug.cpp
#include "Fahrzeug.h"
/* Default Constructor*/
Fahrzeug::Fahrzeug() {std::cout << "Standard-Constructor. Name : " << this->p_sName << " ID: " << this->p_iID << std::endl;}
/* Default Destructor*/
Fahrzeug::~Fahrzeug() {std::cout << "Destructor. Name : " << this->p_sName << " ID: " << this->p_iID << std::endl;}
Fahrzeug::Fahrzeug(std::string p_sName) {
this->p_sName = p_sName;
{std::cout << "Construktor w/ name. Name : " << this->p_sName << " ID: " << this->p_iID << std::endl;}
}
答: 暂无答案
上一个:专用模板类的静态成员初始化
评论
inline
class Fahrzeug { static inline int p_iMaxID = 1; };