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 :

Erreur de constructeur : C2512


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 44
    Par défaut Erreur de constructeur : C2512
    Bonjour ,
    J'utilise visual c++ et en fixant une erreur j'en est eu une autre
    la voicis(en anglais malheuresement):
    error C2512: 'Case' : no appropriate default constructor available
    J'ai eu cette erreur pour mes 2 constructeur de l'objet Tableau...(Le premier n'a pas d'argument) et il me dit que c'est 'Case' le problème... pourtant l'objet Case se compile très bien.

    Merci d'avance.

  2. #2
    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
    Par défaut
    Sans un bout de code, ça relève de l'art de la divination. Quoiqu'il en soit, le MSDN dit :
    Citation Envoyé par MSDN/C2512
    No default constructor is available for the specified class, structure, or union. The compiler supplies a default constructor if user-defined constructors are not provided. If you provide a constructor that takes a nonvoid parameter, you must also provide a default constructor. The default constructor can be a constructor with default values for all parameters.
    Donc, il semblerait que tu n'as pas de contructeur par défaut pour ta classe Case.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 44
    Par défaut
    Voici comment j'ai fais (sans rien dans les constructeurs et le destructeur):
    Tableau.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
     
    #pragma once
    #include "Constantes.h"
    #include "Case.h"
    #include <SDL.h>
    class Tableau
    {
    public:
    	Tableau();
    	Tableau(CASE_TYPE[NB_BLOCS_HAUTEUR][NB_BLOCS_LARGEUR]);
    	~Tableau();
    	Case getCaseAt(int,int);
    	void Print(SDL_Surface*);
    	void setCaseAt(CASE_TYPE,int,int);
    	Case (*getCases())[NB_BLOCS_HAUTEUR][NB_BLOCS_LARGEUR];
    private:
    	Case tab[NB_BLOCS_HAUTEUR][NB_BLOCS_LARGEUR];
    	SDL_Surface *mur;
    	SDL_Surface *vide;
    	SDL_Surface *caisse;
    	SDL_Surface *objectif;
    	SDL_Surface *mario_UP;
    	SDL_Surface *mario_DOWN;
    	SDL_Surface *mario_LEFT;
    	SDL_Surface *mario_RIGHT;
    	SDL_Surface *caise_OK;
    };
    Tableau.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
    #include "Tableau.h"
     
    Tableau::Tableau(){
    	//init...
    }
    Tableau::Tableau(CASE_TYPE cTypes[NB_BLOCS_HAUTEUR][NB_BLOCS_LARGEUR]){
    	//init...
    }
    Tableau::~Tableau()
    {
    	//delete all...
    }
    Case Tableau::getCaseAt(int x,int y) {
    	return (tab[x][y]);
    }
    void Tableau::setCaseAt(CASE_TYPE type,int x,int y){
    	tab[x][y]=*(new Case(type,*(new Position(x,y))));
    }
    void Tableau::Print(SDL_Surface *ecran){
    	//pas fini, mais donne pas d'erreur
    }
    Case (*Tableau::getCases())[NB_BLOCS_HAUTEUR][NB_BLOCS_LARGEUR]{
    	return &tab;
    }

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Mais comme c'est Case qui pose probleme, on veut avoir le header de Case

    En l'occurence, pour construire le tableau de Case... il va falloir un constructeur par défaut à Case.

  5. #5
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 44
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Mais comme c'est Case qui pose probleme, on veut avoir le header de Case

    En l'occurence, pour construire le tableau de Case... il va falloir un constructeur par défaut à Case.
    Merci tu m'a débloquer
    Je suis habituer à java où on n'est pas obliger d'avoir de constructeur par défaut, alors j'ai du en essayant de fixer un bug enlever le constructeur par defaut.

    Merci encore

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par gabuuzz Voir le message
    Merci tu m'a débloquer
    Je suis habituer à java où on n'est pas obliger d'avoir de constructeur par défaut, alors j'ai du en essayant de fixer un bug enlever le constructeur par defaut.

    Merci encore
    Ben ca dépend.... un constructeur par défaut est aussi nécessaire à Java dès qu'on manipule des beans.
    Que ce soit Java ou C++, dès qu'on veut faire du "type" (et non de l'objet) ou a besoin d'un constructeur par défaut...

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par nicroman Voir le message
    Mais comme c'est Case qui pose probleme, on veut avoir le header de Case

    En l'occurence, pour construire le tableau de Case... il va falloir un constructeur par défaut à Case.
    Citation Envoyé par gabuuzz Voir le message
    Merci tu m'a débloquer
    Je suis habituer à java où on n'est pas obliger d'avoir de constructeur par défaut, alors j'ai du en essayant de fixer un bug enlever le constructeur par defaut.

    Merci encore
    En l'occurrence, j'aurais tendance à crier "danger"...

    Qu'il faille un constructeur par défaut pour permettre une implémentation donnée est une chose, mais, il faut se poser la question de savoir s'il est opportun (si cela a du sens) de fournir ce constructeur...

    Ce que je veux dire, c'est que, si tu as décidé de fournir des arguments à ta classe Case, c'est que tu avais surement des raisons valables de le faire.

    Si, pour contenter le compilateur, tu en viens à décider de fournir un constructeur ne prenant pas d'argument, tu en arrive à une et une seule alternative:
    Soit, il n'était pas nécessaire de fournir les arguments au constructeur (et tu as donc "perdu du temps" à le faire)

    Soit tu prend le risque d'obtenir une instance de Case dont l'initialisation n'est pas complète et cohérente avec ce que tu attend d'elle...

    Dans tous les cas, il y a "quelque chose" qui "cloche" au niveau de la conception

    D'un autre coté, nous pourrions nous poser la question de la "durée de vie" des différents objet...

    Doit on décider qu'une Case ne peut exister qu'au travers d'un Tableau, auquel cas, ce serait au Tableau de s'assurer - après création de la Case - de la mise en cohérence de l'état de cette dernière, ou doit on envisager le fait qu'une Case est susceptible d'exister en dehors de tout Tableau, auquel cas, il y a lieu de "transmettre" la responsabilité de la création, de la destruction et de la mise en cohérence de l'état des Case à autre chose qu'à Tableau, et transmettre au Tableau une case existante par ailleurs
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. [MVVM] Erreur au constructeur de mon WindowViewModel
    Par Pynouz dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 21/03/2014, 15h52
  2. erreur dans constructeur sans exception
    Par Madalen dans le forum Langage
    Réponses: 5
    Dernier message: 18/08/2009, 10h07
  3. [SimpleXML] erreur avec simple XML sur le constructeur
    Par zulot dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 20/04/2007, 16h06
  4. [Tableaux] Erreur syntaxique sur constructeur, PHP5
    Par fredrik dans le forum Langage
    Réponses: 2
    Dernier message: 14/08/2006, 14h51
  5. [Language][Héritage] Erreur à propos du constructeur
    Par zizou771 dans le forum Langage
    Réponses: 4
    Dernier message: 12/09/2005, 16h48

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