2015-08-12 2 views
-3

J'essaie de créer une classe pour ces deux variables (window, windowSurface) afin que je puisse y accéder dans différentes zones de mon code. Mon erreur est:Initialisation C++ en classe de membre de données statiques

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 

Du code ci-dessous

#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 

Qu'est-ce que je fais mal et comment puis-je résoudre ce problème?

Répondre

1

Lisez attentivement les erreurs que le compilateur vous donne.

Les membres de données statiques peuvent être déclarés, mais non définis dans la définition de classe, à moins que ce membre de données statiques de type intégrale ou énumération ne soit déclaré const (et non volatile). Depuis C++ 11 membre de données statiques de LiteralType et déclaré comme constexpr peut être initialisé avec un initialiseur accolade ou égale qui est une expression constante dans la définition de classe.

De même, il est déconseillé de donner un nom de membre statique correspondant à son nom de classe.

initialisation Supprimer des membres statiques et renommer windowSurface à la surface:

class windowSurface 
{ 
public: 
    windowSurface(); 
    virtual ~windowSurface(); 
    static SDL_Window window; 
    static SDL_Surface surface; 
protected: 
private: 
}; 

et ajouter une définition dans le fichier cpp correspondant:

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);