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 :

Objet en argument


Sujet :

C++

Vue hybride

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut Objet en argument
    Bonjour, je ne trouve pas mon erreur.

    L'erreur apparait dans "ThreadKnob.cpp".

    J'ai comme message d'erreur "no default constructor exists for class Knob".
    Je ne comprends pas :0

    ThreadKnob.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "Knob.h"
    #include "ThreadKnob.h"
     
    using namespace std;
     
    ThreadKnob::ThreadKnob(Knob knob) : Thread(){
     
    	t_knob = knob;
    }
    ThreadKnob.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
    #ifndef DEF_TKNOB
    #define DEF_TKNOB
     
    #include <iostream>
    #include <string>
     
    class ThreadKnob : public Thread{
    public:
     
    	ThreadKnob(Knob knob);
     
    private:
     
    	Knob t_knob;
    };
     
    #endif
    Knob.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include "Knob.h"
     
    using namespace std;
     
    Knob::Knob(int posX, int posY, int size) : ImageComponent() {
    	k_posX = posX;
    	k_posY = posY;
    	k_size = size;
     
    }
    Knob.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Knob : public ImageComponent{
    public:
     
    	Knob(int posX, int posY, int size);
     
    private:
     
    	int k_posX;
    	int k_posY;
    	int k_size;
    };
     
    #endif
    C'est surement très bête mais bon...
    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Knob n'a pas de constructeur par défaut.
    Puisque ta classe ThreadKnob contient un Knob, celui-ci doit être initialisé dans la liste d'initialisation de chacun de ses constructeurs.

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "Knob.h"
    #include "ThreadKnob.h"
     
    using namespace std;
     
    ThreadKnob::ThreadKnob(Knob knob) : Thread(), t_knob(knob) {
     
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    Merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    J'ai une autre erreur qui en découle par contre et je bloque depuis 1h :

    error C2248: 'juce::ImageComponent::ImageComponent' : cannot access private member declared in class 'juce::ImageComponent' (ThreadKnob.cpp)

    Je repost mon code :

    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
    #include "Knob.h"
    #include "ThreadKnob.h"
     
    using namespace std;
     
    ThreadKnob::ThreadKnob(Knob knob) : t_knob(knob), Thread("test") {
     
    	t_posX = 0;
    	t_posY = 0;
    }
     
    void ThreadKnob::run(){
     
    	this->sleep(500);
     
    	t_knob.moveMark(t_posX, t_posY);
     
     
    }
     
    void ThreadKnob::setPoint(float x, float y){
     
    	t_posX = x;
    	t_posY = y;
    }
    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
    #ifndef DEF_THREADKNOB
    #define DEF_THREADKNOB
     
    #include <iostream>
    #include <string>
     
    class ThreadKnob : public Thread{
    public:
     
    	Knob t_knob;
    	ThreadKnob(Knob knob);
    	void setPoint(float x, float y);
    	void run();
     
    private:
    	int t_posX;
    	int t_posY;
     
    };
     
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "Knob.h"
     
    using namespace std;
     
    Knob::Knob(int posX, int posY, int size) : ImageComponent() {
    	k_posX = posX;
    	k_posY = posY;
    	k_size = size;
     
    }
    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 DEF_KNOB
    #define DEF_KNOB
     
    #include <iostream>
    #include <string>
    #include "../JuceLibraryCode/JuceHeader.h"
     
    class Knob : public ImageComponent{
    public:
     
    	Knob(int posX, int posY, int size);
    	void paint(Graphics &g);
    	void moveMark(float x, float y);
    	void setStartPoint(float x, float y);
     
    private:
    	int k_posX;
    	int k_posY;
    	int k_size;
    };
     
    #endif
    Merci encore .

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    Ce serait pas un problème d'héritage avec juce::ImageComponent ??

    Pourtant je l'ai déclaré en public (enfin je crois)...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    J'ai trouvé c'était un problème de pointeur :

    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
    #include "Knob.h"
    #include "ThreadKnob.h"
     
    using namespace std;
     
    ThreadKnob::ThreadKnob(Knob *knob) : Thread("test"){
     
    	t_knob = knob;
    	t_posX = 0;
    	t_posY = 0;
    }
     
    void ThreadKnob::run(){
     
    this->sleep(500);
     
    t_knob->moveMark(t_posX, t_posY);
     
     
    }
     
    void ThreadKnob::setPoint(float x, float y){
     
    t_posX = x;
    t_posY = y;
    }
    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
    #ifndef DEF_THREADKNOB
    #define DEF_THREADKNOB
     
    #include <iostream>
    #include <string>
    #include "../JuceLibraryCode/JuceHeader.h"
     
    class ThreadKnob : public Thread{
    public:
     
    	ThreadKnob(Knob *knob);
    	void setPoint(float x, float y);
    	void run();
     
     
    private:
     
    	Knob *t_knob;
    	int t_posX;
    	int t_posY;
     
    };
     
    #endif

  7. #7
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ThreadKnob::ThreadKnob(Knob knob) : Thread(){
     
    	t_knob = knob;
    }
    ton t_knob, avant de faire l'opération "=", il est construit comment selon toi ?
    Et ben le compilateur ne le sait pas. C'est pour cela qu'il te demande gentillement d'implémenter un constructeur par défaut pour ton objet type Knob.

    Personnellement je vois trois solutions:

    1) si tu veux à tout prix éviter de modifier ta classe Knob, il te suffit de remplacer ce qu'il y a avant par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ThreadKnob::ThreadKnob(Knob knob) : Thread() , t_knob(knob) {
    }
    mais je suis pas sur de mon coup, à tester.

    2) Si tu peux modifier ta classe Knob, tu peux implémenter le constructeur par défaut "Knob();"

    3) la méthode que je préfère (même si ça dépend de l'évolution de ton programme): déclarer les inputs "int posX, int posY, int size" comme facultatives en mettant dans ton header:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Knob(int posX = VALEUR_PAR_DEFAUT, int posY = VALEUR_PAR_DEFAUT, int size = VALEUR_PAR_DEFAUT);

    EDIT: grilled

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

Discussions similaires

  1. Passer un objet en argument
    Par java-mobile dans le forum Débuter
    Réponses: 19
    Dernier message: 17/09/2008, 10h41
  2. passage d'objet en argument
    Par leprofmelo dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 06/06/2008, 16h19
  3. Passer un objet en argument d'une servlet
    Par julien1311 dans le forum Servlets/JSP
    Réponses: 16
    Dernier message: 06/08/2007, 16h30
  4. [POO] Objet en argument de fonction
    Par lunab54 dans le forum Langage
    Réponses: 12
    Dernier message: 12/02/2007, 23h32
  5. [variadic] passer un objet en argument variable
    Par Spartan03 dans le forum C++
    Réponses: 3
    Dernier message: 30/04/2006, 11h31

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