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 :

error C2512 lors d'une tentative d'instanciation de classe


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 42
    Points : 23
    Points
    23
    Par défaut error C2512 lors d'une tentative d'instanciation de classe
    j'ai une erreur quand j'essai de creer un objet de cette classe :

    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
    #ifndef Game_Graphic_DirectX11Renderer_h
    #define Game_Graphic_DirectX11Renderer_h
     
    #include "IRenderer.h"
     
     
    namespace Game {
    namespace Graphic {
     
    class DirectX11Renderer : public IRenderer 
    {
    	DirectX11Renderer():IRenderer(){}
    	~DirectX11Renderer(){}
    };
     
    } /* End of namespace Game::Graphic */
    } /* End of namespace Game */
     
    #endif // Game_Graphic_DirectX11Renderer_h
    voici IRenderer :
    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
    #ifndef Game_Graphic_IRenderer_h
    #define Game_Graphic_IRenderer_h
    #pragma once
    #include <vector>
     
    #include <Game/Graphic/ITexture.h>
    #include <Game/Graphic/IMesh.h>
     
     
    namespace Game {
    	namespace Graphic {
    		enum RendererType
    		{
    			DX9,
    			DX10,
    			DX11,
    			OpenGL
    		};
    		class IRenderer {
     
    		 public:
     
    			 ITexture* LoadTexture(){return 0;}
     
    			 IMesh* BuildMesh(){return 0;}
     
    			 RendererType GetType();
    		//protected:
    			IRenderer(){}
    			~IRenderer(){}
     
    		 protected:
    			RendererType type;
    		    std::vector< IMesh* > renderMeshes;
    			time_t timeOfLastRender;
    		};
     
    	} /* End of namespace Game::Graphic */
    } /* End of namespace Game */
     
    #endif // Game_Graphic_IRenderer_h
    quel est le probleme ? je ne trouve pas

    voici ma ligne qui pose probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectX11Renderer* renderer11 = new DirectX11Renderer();

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Il y a peut-être une paire de parenthèse en trop (FAQ).

    PS : Si IRenderer est une interface, alors elle ne devrait pas avoir de constructeur, et son destructeur ainsi que ses méthodes devraient être virtuels, non ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    A la base elle l'était (abstraite) mais mon but est d'avoir des fonction communes a tous les renderer : render , build mesh,...
    qui sont des fonctions qui devront pouvoir etre appellée sans savoir si le renderer est directx ou opengl ,... ou tout autre
    j'ai donc besoin d'avoir un moyen de transformer ces objets en un seul commun et donc il faut qu'il soit instanciable ...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par cob59 Voir le message
    Il y a peut-être une paire de parenthèse en trop (FAQ).
    Euh peut etre mais je ne vois pas où ...?

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Citation Envoyé par kev753 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectX11Renderer* renderer11 = new DirectX11Renderer;

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    j'y ai pensé mais nn ca ne change rien ...

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Citation Envoyé par kev753 Voir le message
    A la base elle l'était (abstraite) mais mon but est d'avoir des fonction communes a tous les renderer : render , build mesh,...
    qui sont des fonctions qui devront pouvoir etre appellée sans savoir si le renderer est directx ou opengl ,... ou tout autre
    j'ai donc besoin d'avoir un moyen de transformer ces objets en un seul commun et donc il faut qu'il soit instanciable ...
    Alors ce n'est plus une interface, juste une classe parente.
    Ça vaudrait peut-être le coup de la nommer autrement, non ?

    Au fait, est-ce que le constructeur de DirectX11Renderer ne serait pas private ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    pour le nom j'y réflechis parce que meme si ce n'est pas une interface il n'y arua jamais aucun objet IRenderer, en tout cas aucun créé par son constructeur ...
    et si , normalement il doit etre en private le constructeur mais pour l'instant je l'ai mis en public au cas ou ce serais le probleme ...

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Le constructeur de DirectX11Renderer est actuellement en private (visibilité par défaut des membres d'une class) et c'est justement le souci. Il devrait être publique si tu souhaites l'instancier depuis l'extérieur.

    Quant à IRenderer, je crois que tu devrais te renseigner sur le polymorphisme, qui te permettrait d'utiliser en tant que IRenderer un objet qui ne fait qu'implémenter son interface. Donc IRenderer n'aurait besoin ni de constructeur, ni de méthodes concrètes.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    je suis en ce moment entrain de me renseigner sur le sujet car je me doute que c'est possible mais j'aimerais bien régler ce probleme avant d'avancer plus loin et l'ajout de "public:" ne change absolument rien :s

    petit rappel du code a cette heure ci :
    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
    #ifndef Game_Graphic_DirectX11Renderer_h
    #define Game_Graphic_DirectX11Renderer_h
     
    #include "IRenderer.h"
     
     
    namespace Game {
    namespace Graphic {
     
    class DirectX11Renderer : public IRenderer 
    {
    public:
    	DirectX11Renderer():IRenderer(){}
    	~DirectX11Renderer(){}
    };
     
    } /* End of namespace Game::Graphic */
    } /* End of namespace Game */
     
    #endif // Game_Graphic_DirectX11Renderer_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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #ifndef Game_Graphic_IRenderer_h
    #define Game_Graphic_IRenderer_h
    #pragma once
    #include <vector>
     
    #include <Game/Graphic/ITexture.h>
    #include <Game/Graphic/IMesh.h>
     
     
    namespace Game {/*
    	class DirectX10Renderer;
    	class DirectX11Renderer;
    	class OpenGLRenderer;*/
    	namespace Graphic {
    		enum RendererType
    		{
    			DX9,
    			DX10,
    			DX11,
    			OpenGL
    		};
    		class IRenderer {
     
    		 public:
     
    			 ITexture* LoadTexture(){return 0;}
     
    			 IMesh* BuildMesh(){return 0;}
     
    			 RendererType GetType();
    		//protected:
    			IRenderer(){}
    			~IRenderer(){}
     
    		 protected:
    			RendererType type;
    		    std::vector< IMesh* > renderMeshes;
    			time_t timeOfLastRender;
    		};
     
    	} /* End of namespace Game::Graphic */
    } /* End of namespace Game */
     
    #endif // Game_Graphic_IRenderer_h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    renderer11 = new DirectX11Renderer(); // error C2512: 'Game::Graphic::DirectX11Renderer' : no appropriate default constructor available

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    je vais créer un post concernant l'héritage et le polymorphisme avec une version théorique

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    euh le nouveau post c'est concernant la manière dont je dois développer le IRenderer mais j'ai toujours la meme erreur qui n'est toujours pas résolue :s

  13. #13
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    Quelle est l'erreur donnée par le compilateur / l'exécution ?

  14. #14
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Même s'il comporte d'autres problème, le code que tu présente compile sans problème :
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <ctime>
    #include <vector>
     
    namespace Game {/*
    	class DirectX10Renderer;
    	class DirectX11Renderer;
    	class OpenGLRenderer;*/
    	namespace Graphic {
    		enum RendererType
    		{
    			DX9,
    			DX10,
    			DX11,
    			OpenGL
    		};
    		class ITexture;
    		class IMesh;
    		class IRenderer {
     
    		 public:
     
    			 ITexture* LoadTexture(){return 0;}
     
    			 IMesh* BuildMesh(){return 0;}
     
    			 RendererType GetType();
    		//protected:
    			IRenderer(){}
    			~IRenderer(){}
     
    		 protected:
    			RendererType type;
    		    std::vector< IMesh* > renderMeshes;
    			time_t timeOfLastRender;
    		};
     
    	} /* End of namespace Game::Graphic */
    }
     
    namespace Game {
    namespace Graphic {
     
    class DirectX11Renderer : public IRenderer
    {
    public:
    	DirectX11Renderer():IRenderer(){}
    	~DirectX11Renderer(){}
    };
     
    } /* End of namespace Game::Graphic */
    }
     
    namespace gg = Game::Graphic;
    int main()
    {
        gg::IRenderer *renderer11 = new gg::DirectX11Renderer();
       return 0;
    }

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

Discussions similaires

  1. [XL-97] Erreur 13 lors d'une tentative de suppression de doublons d'une listbox
    Par Michel Delapouaitte dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 15/04/2009, 11h28
  2. Problème lors d'une tentative d'IMPORT
    Par muchmorehuman dans le forum Oracle
    Réponses: 3
    Dernier message: 10/03/2009, 10h36
  3. [EJB3 Entity] Exception lors d'une tentative d'insertion
    Par Mister Nono dans le forum Java EE
    Réponses: 1
    Dernier message: 15/12/2008, 03h04
  4. Bug Excel lors d'une tentative de modif de code VBA
    Par aerodynamique dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/11/2007, 11h28
  5. Réponses: 10
    Dernier message: 13/11/2007, 13h04

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