Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème création de classe

16 juin 2008 à 19:27:32

Salut à tous,
voila j'ai finis de lire le cours de mateo sur Qt et j'aimerais faire mon pitit programme, et j'ai ait problême lorsque je veux utiliser une class créée par moi.

Ce que je veux c'est créer une class à qui je passe le lien d'une image, le texte descriptif de cette image et le Widget parent et ma belle class m'en fairai un bouton... je sais pas si c'est très clair,
bref mon code vous aidera peut-être à voir le problême.

SetBoutonImage.h
#ifndef DEF_SETBOUTONIMAGE
#define DEF_SETBOUTONIMAGE
#include <QtGui>

class SetBoutonImage
{
   public:
   void SetBoutonImage(QString &m_image, QString &m_nomBouton, QWidget &m_parent);
};

#endif


SetBoutonImage.cpp
#include <QtGui>
#include "SetBoutonImage.h"

void SetBoutonImage::SetBoutonImage(QString &m_image, QString &m_nomBouton, QWidget &m_parent)
{
    QLabel *label = new QLabel;
    label->setPixmap(QPixmap(m_image));
    label->setAlignment(Qt::AlignCenter);
    label->setCursor(Qt::PointingHandCursor);

    QLabel *label2 = new QLabel;
    label2->setText("<strong>" + m_nomBouton + "</strong>");
    label2->setAlignment(Qt::AlignCenter);

    QVBoxLayout *boxBoutton = new QVBoxLayout;
    boxBouton->addWidget(label);
    boxBouton->addWidget(label2);

    QHBoxLayout *vbox1 = new QHBoxLayout;
    vbox1->addLayout(boxBoutton);
    vbox1->setAlignment(Qt::AlignCenter);

    m_parent->setLayout(vbox1);
}


main.cpp
#include "SetBoutonImage.h"

QWidget *page1 = new QWidget;
SetBoutonImage::SetBoutonImage("newUser.png", "Nouvel utilisateur", page1);


Et sa me met une erreur un peu comme ça :
"error : return type specification for constructor invalid"
"no matching function for call to SetBoutonImage..."

je sais plus ou chercher l'erreur siouplait aider moi... I'm a nOOb (avec des O MAJuscules attention ^^)
  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2008 à 19:37:49

Le compilateur t'indique exactement l'erreur.

Un onctructeur ne renvoit rien, pas même void.
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
16 juin 2008 à 19:47:04

non non sans void c'est pareil,
j'en avait pas mis avant,
mais bon la j'ai un peu tout essayer et je vois pas ce que sa peut-être, ya rien de choquant ou je sais pas dans ce code qui se voit toute suite comme ça???? :euh:
  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2008 à 20:00:01

Je t'assure que c'est ça l'erreur. Enlève le void aux deux endroits.
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
16 juin 2008 à 20:11:44

arrf oui, en fait le truc c'est que c'est plus les mêmes erreur maintenant il me met des erreur dans le main.cpp...
mais je crois que j'ai trouver une solution mais pas sure
  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2008 à 20:55:10

Tu ne veux pas faire une fonction static par hazard?
SetBoutonImage::SetBoutonImage("newUser.png", "Nouvel utilisateur", page1);


Il te faut mettre static devant le prototype :
#ifndef DEF_SETBOUTONIMAGE
#define DEF_SETBOUTONIMAGE
#include <QtGui>

class SetBoutonImage
{
   public:
   static void SetBoutonImage(QString &m_image, QString &m_nomBouton, QWidget &m_parent);
};

#endif


Enfin, peut-etre que tu ne veut pas faire de fonction statique, mais c'est ce que je crois comprendre en voyant ton code.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
16 juin 2008 à 21:11:32

Je vois pas l'intérêt d'une classe pour faire ça. L'idée de la fonction statique est pas excellente.
  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2008 à 23:56:36

Déjà le nom de la classe ne laisse rien présager de bon. Une classe qui a pour nom celui d'une fonction .. Soit tu dois completement revoir la conception objet, soit tu veux coder style C, à ce moment là, n'utilises que des méthodes static que tu met dans différents .cpp, et tu les appelles comme tu le fais avec nomClasse::nomFonction().
  • Partager sur Facebook
  • Partager sur Twitter