C++ in-class静态数据成员的初始化
C++ in-class initialization of static data member
我正在尝试为这两个变量(window、windowSurface)创建一个 class,以便我可以在代码的不同区域访问它们。我的错误是:
include/windowSurface.h|11|error: field initializer is not constant|
include/windowSurface.h|11|error: in-class initialization of static data member ‘SDL_Window windowSurface::window’ of incomplete type
来自下面的代码
#ifndef WINDOWSURFACE_H
#define WINDOWSURFACE_H
#include "SDL2/SDL.h"
class windowSurface
{
public:
windowSurface();
virtual ~windowSurface();
static SDL_Window window = SDL_CreateWindow( "Tetris", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN );
static SDL_Surface windowSurface = SDL_GetWindowSurface( window );
protected:
private:
};
#endif // WINDOWSURFACE_H
我做错了什么,我该如何解决?
仔细阅读编译器给你的错误。
可以声明静态数据成员,但不能在 class 定义中定义,除非此静态数据成员为整型或枚举类型并且声明为 const(而非 volatile)。
由于 C++11 静态数据成员 LiteralType 和声明为 constexpr 可以用大括号或等号初始化器初始化,它是 class 定义中的常量表达式。
此外,提供与其 class 名称匹配的静态成员名称也是个坏主意。
删除静态成员的初始化并将 windowSurface 重命名为 surface:
class windowSurface
{
public:
windowSurface();
virtual ~windowSurface();
static SDL_Window window;
static SDL_Surface surface;
protected:
private:
};
并在对应的cpp文件中添加定义:
SDL_Window windowSurface::window = SDL_CreateWindow( "Tetris", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN );
SDL_Surface windowSurface::surface = SDL_GetWindowSurface( windowSurface::window );
我正在尝试为这两个变量(window、windowSurface)创建一个 class,以便我可以在代码的不同区域访问它们。我的错误是:
include/windowSurface.h|11|error: field initializer is not constant|
include/windowSurface.h|11|error: in-class initialization of static data member ‘SDL_Window windowSurface::window’ of incomplete type
来自下面的代码
#ifndef WINDOWSURFACE_H
#define WINDOWSURFACE_H
#include "SDL2/SDL.h"
class windowSurface
{
public:
windowSurface();
virtual ~windowSurface();
static SDL_Window window = SDL_CreateWindow( "Tetris", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN );
static SDL_Surface windowSurface = SDL_GetWindowSurface( window );
protected:
private:
};
#endif // WINDOWSURFACE_H
我做错了什么,我该如何解决?
仔细阅读编译器给你的错误。
可以声明静态数据成员,但不能在 class 定义中定义,除非此静态数据成员为整型或枚举类型并且声明为 const(而非 volatile)。
由于 C++11 静态数据成员 LiteralType 和声明为 constexpr 可以用大括号或等号初始化器初始化,它是 class 定义中的常量表达式。
此外,提供与其 class 名称匹配的静态成员名称也是个坏主意。
删除静态成员的初始化并将 windowSurface 重命名为 surface:
class windowSurface
{
public:
windowSurface();
virtual ~windowSurface();
static SDL_Window window;
static SDL_Surface surface;
protected:
private:
};
并在对应的cpp文件中添加定义:
SDL_Window windowSurface::window = SDL_CreateWindow( "Tetris", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN );
SDL_Surface windowSurface::surface = SDL_GetWindowSurface( windowSurface::window );