IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème de constructeur et d'héritage


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 80
    Par défaut Problème de constructeur et d'héritage
    Bonjour à vous,

    Afin de continuer mon apprentissage du C++, j'ai chercher des bout de codes sur internet.

    Après avoir compris certaine parties, j'ai du me renseigner pour comprendre certain point comme l'héritage.

    J'ai donc essayé de recrée de mon côté les fonctions tout en découvrant.
    Malheureusement, ça ne fonctionne, j'ai donc comparé aux sources original, et pourtant à l'identique mon code ne fonctionne pas.

    Voici les codes en question :

    Smash2D.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include "SDLGL_Application.h"
     
    #include <SDL.h>
    #include <string>
     
    class Smash2D : public SDLGL_Application
    {
    public:
        Smash2D(const WindowsParameters &parameters);
    };
    Smash2D.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include "Smash2D.h"
     
    using namespace std;
     
    Smash2D::Smash2D(const WindowsParameters &parameters)
    {
    	  SDLGL_Application(parameters)
    	  {
     
     
    	  }
     
    }
     
    int main(int argc, char *argv[])
    {
        // Variables
        SDL_Event event;
        bool done = true;
     
        // On crée une structure de parametres.
        WindowsParameters parameters;
        parameters.Title      = "Test";
        parameters.Width      = 640;
        parameters.Height     = 480;
        parameters.FullScreen = false;
     
        // On crée la fenetre à l'aide des parametres.
        Smash2D application(parameters);
     
        return 0;
    }
    SDLGL_Application.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    #include "SDLGL_Application.h"
     
    // Parametres de la fenêtre par défault.
    WindowsParameters::WindowsParameters()
    {
        Title      = "Application SDL/OpenGL"; // Nom de la fenêtre.
        Width      = 640;   // Largeur
        Height     = 480;   // Hauteur
        FullScreen = false; // Pleine ecran.
    }
     
    SDLGL_Application::SDLGL_Application(WindowsParameters parameters)
    {
        // Initialisation de la SDL.
        SDL_Init(SDL_INIT_VIDEO);
     
        // Debug.
        #ifndef NDEBUG
            freopen( "CON", "w", stdout );
            freopen( "CON", "w", stderr );
        #endif
     
        // On enregistre le nom de la fenêtre.
        SDL_WM_SetCaption(parameters.Title.c_str(), NULL);
     
        // Les flags de la fenetres.
        Uint32 flags = SDL_OPENGL;
     
        // Si le pleine ecran est activer.
        if(parameters.FullScreen)
        {
            // On ajoute le flags pleine ecran.
            flags |= SDL_FULLSCREEN;
            if (parameters.Width == 0 || parameters.Height == 0)
            {
                const SDL_VideoInfo *videoInfo = SDL_GetVideoInfo();
                parameters.Width  = videoInfo->current_w;
                parameters.Height = videoInfo->current_h;
            }
        }
     
        // On centre la fenetre (Dans le cas ou le pleine ecran est off)
        SDL_putenv("SDL_VIDEO_WINDOW_POS=center");
        SDL_SetVideoMode(parameters.Width, parameters.Height, 32, flags);
    }
    SDLGL_Application.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #ifndef H_SDLGL_APPLICATION
    #define H_SDLGL_APPLICATION
     
    #include <SDL.h>
    #include <string>
     
    struct WindowsParameters
    {
    	WindowsParameters(); // Initialiser la structure.
    	std::string Title;   // Stocke le titre de la fenêtre.
    	unsigned int Width;  // Largeur de l'écran.
    	unsigned int Height; // Hauteur de l'écran.
    	bool FullScreen;     // Gestion du pleine ecran.
    };
     
    class SDLGL_Application
    {
    public:
        SDLGL_Application(WindowsParameters parameters);
    };
     
    #endif
    La classe Smash2D herite de la classe mere SDLG_Application.
    Le problème, la classe fille Smash2D cherche son constructeur dans la classe mere SDLG_Application et me sort donc les erreurs suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    In constructor `Smash2D::Smash2D(const WindowsParameters&)':
    12: error: no matching function for call to `SDLGL_Application::SDLGL_Application()'
    23: note: candidates are: SDLGL_Application::SDLGL_Application(const SDLGL_Application&)
    25: note:                 SDLGL_Application::SDLGL_Application(WindowsParameters)
    14: error: expected `;' before '{' token
    :: === Build finished: 4 errors, 0 warnings ===
    Merci à vous d'avoir pris le temps de m'avoir lu.
    Hybrix.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    L'appel du constructeur de la classe mère est un peu étonnant. Es-tu sûr que c'est identique à tes sources ou que les sources sont bonnes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Smash2D::Smash2D(const WindowsParameters &parameters)
    {
    	  SDLGL_Application(parameters)
    	  {
     
     
    	  }
     
    }
    J'écrirais plutôt à la place

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Smash2D::Smash2D(const WindowsParameters &parameters) 
      : SDLGL_Application(parameters)
    {
     
    }

  3. #3
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Citation Envoyé par aoyou
    L'appel du constructeur de la classe mère est un peu étonnant. Es-tu sûr que c'est identique à tes sources ou que les sources sont bonnes ?

    Code :
    Smash2D::Smash2D(const WindowsParameters &parameters){ SDLGL_Application(parameters) { } }


    J'écrirais plutôt à la place

    Code :
    Smash2D::Smash2D(const WindowsParameters &parameters) : SDLGL_Application(parameters){ }
    C'est là qu'est le problème, tu ne donnes pas les arguments au constructeur de la classe parente correctement, le compilateur, considère donc que c'est un appel sans argument, et alors il ne trouve pas de constructeur correspondant à un constructeur sans argument, essayes donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Smash2D::Smash2D(const WindowsParameters &parameters) 
      : SDLGL_Application(parameters)
    {
     
    }
    Cela retransmet des paramètres au constructeur de la classe parente

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de constructeurs par héritage
    Par oieretxe dans le forum C++
    Réponses: 10
    Dernier message: 02/11/2013, 19h31
  2. Problème de constructeur de copie ?
    Par Bestiol dans le forum C++
    Réponses: 6
    Dernier message: 03/11/2006, 11h28
  3. [POO]Probléme de constructeur virtuel surchargé
    Par Laurent Dardenne dans le forum Delphi
    Réponses: 10
    Dernier message: 15/08/2006, 12h19
  4. [Hibernate]Problème pour mapping d' un héritage
    Par K-Kaï dans le forum Hibernate
    Réponses: 6
    Dernier message: 29/06/2006, 14h28
  5. [C#] DLL, problème de constructeur
    Par gmonta dans le forum C#
    Réponses: 4
    Dernier message: 30/11/2005, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo