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

Discussion :

Exécuter une fonction d'un autre fichier source

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Par défaut Exécuter une fonction d'un autre fichier source
    Bonjour,

    Dans mon projet, je voudrais lancer une fonction void a::1() d'un fichier source A.cpp depuis un fichier source B.cpp.

    si je fais dans b.cpp ça ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void b:: x(){
    a::1();
    }
    il faut utiliser connect signal slot?

    cordialement

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut


    Il suffit d'inclure le fichier d'en-tête correspondant à l'autre fonction (ou à mettre son prototype avant de l'utiliser, ça revient exactement au même sauf que le copier-coller est crade).

    Par exemple, premier fichier d'implémentation (1.cpp) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include "1.hpp"
    void f(int x) { return 42; }
    1.hpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #pragma once
    void f(int);
    Utilisation (2.cpp) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include "1.hpp"
    #include <ostream>
    int main() {
      std::cout << f(21) << std::endl; 
    }
    (Cf. les cours de C, section Compilation séparée ou un truc du genre : c'est exactement le même principe avec les classes.)
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Par défaut
    c'est bien ce que j'ai fais !!!

    avec les vraies noms :

    dans QtGestXavMedias.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private slots:
        void FicheFilmAleatoire();
    sur mon QtGestXavMedias.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
    void QtGestXavMedias::FicheFilmAleatoire()
    {
        fileList.clear();
        listFilter << "*.film";
        QDirIterator dirIterator((MyAppDirPath + "/" + ui->ListeUtilisateurs->text()), listFilter ,QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories);
        while(dirIterator.hasNext())
        {
            dirIterator.next(); 
            fileList << dirIterator.fileName();
        }
        fileList.replaceInStrings(".film",""); 
        NombreFilms = fileList.count(); 
        if (NombreFilms > 0)
        {
            qsrand( QDateTime::currentDateTime().toTime_t() );
            nbAlea = (qrand() % NombreFilms); 
            NomFicheFilm = fileList.at(nbAlea); 
            CheminFicheFilmFilm = (MyAppDirPath + "/" + ui->ListeUtilisateurs->text() + "/" + NomFicheFilm + ".Film"); // reconstruit le chemin du fichier film
            CheminFicheFilmJpg = (MyAppDirPath + "/" + ui->ListeUtilisateurs->text() + "/" + NomFicheFilm + ".Jpg"); // // reconstruit le chemin du fichier jpg
            NumFiche = nbAlea; 
        }
        else
        {
            QMessageBox msgBox;
            msgBox.setText ("le repertoire, de la personne selectionné, n'a pas de fiche film ou n'existe pas \n" "Veuillez changer de personne par defaut");
            msgBox.exec();
            GXMGestionUtilisateurs dialog(this);
            connect(&dialog, SIGNAL(displayText(QString)), ui->ListeUtilisateurs, SLOT(setText(QString)));
            dialog.exec();
        }
    }
    sur mon httpwindow.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
    #include "QtGestXavMedias.h"
     
    ......
     
    void HttpWindow::UnZip (QString ficheZip , QString ficheExtract)
    {
        QDir::setCurrent(MyAppDirPath);
        MyAppDirPath =  QCoreApplication::applicationDirPath();
        JlCompress::extractDir(ficheZip,ficheExtract);
        bool valid  = QFile::exists(MyAppDirPath + "/" + utilisateur + "/"+ fiche + ".film");
        if (valid){
            statusLabel->setText(tr("Fichiers extraits"));
            listFilter << "*.zip";
            QDirIterator dirIterator((MyAppDirPath + "/" + utilisateur + "/Zip"), listFilter ,QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories);
            while(dirIterator.hasNext())
            {
                dirIterator.next();
                QFile::remove(MyAppDirPath + "/" + utilisateur + "/Zip/"+ dirIterator.fileName());
            }
            listFilter << "*.txt";
            QDirIterator dirIterator2((MyAppDirPath + "/" + utilisateur), listFilter ,QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories);
            while(dirIterator2.hasNext())
            {
                dirIterator2.next();
                QFile::remove(MyAppDirPath + "/" + utilisateur + "/"+ dirIterator2.fileName());
            }
            FicheFilmAleatoire();
        }
    }
    D:\Programmation\C++\QtC++GestXavMedias2\httpwindow.cpp:326: erreur : 'FicheFilmAleatoire' was not declared in this scope

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void QtGestXavMedias::FicheFilmAleatoire()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void HttpWindow::UnZip (QString ficheZip , QString ficheExtract)
    {
        FicheFilmAleatoire();
    }
    FicheFilmAleatoire est une méthode de QtGestXavMedias
    UnZip est une méthode de HttpWindow
    Y'a-t-il un lien (héritage) entre HttpWindow et QtGestXavMedias ? HttpWindow : public QtGestXavMedias ?
    Si non, absolument aucune raison qu'une instance HttpWindow puisse utiliser FicheFilmAleatoire.
    Et comme l'indique l'erreur
    erreur : 'FicheFilmAleatoire' was not declared in this scope
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Par défaut
    Bonsoir,

    Merci Bousk, j'ai compris la cause et je te remercie par contre pour le remede...
    je viens d'y passer la soirée, mes lacunes sont encore enormes !!!

    Y'a-t-il un lien (héritage) entre HttpWindow et QtGestXavMedias ? HttpWindow : public QtGestXavMedias ?
    non, il y a dejà un heritage de HttpWindow avec QDialog du coup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HttpWindow : public QDialog, QtGestXavMedias
    pas bon du tout

    je pense que c'est par ce que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QtGestXavMedias : public QMainWindow
    je pense que je peux passer par un bouton sur QtGestXavMedias et le declencher par [connect signal slot] depuis HttpWindow.

    Est-ce que cela ne vous parrait pas être de la bidouille, y a t'il une solution plus "academique".

    En sachant que, bien qu' amateur, je cherche à apprendre dans la durée.

    cordialement

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Ce n'est pas en codant que tu vas apprendre dans la durée alors, parce que là tu as surtout des lacunes théoriques. Il faudrait commencer par le commencement : qu'est-ce qu'une classe, qu'est-ce qu'un objet, qu'est-ce qu'une méthode...

Discussions similaires

  1. appel d'une fonction depuis un autre fichier?
    Par cortex59 dans le forum C++
    Réponses: 1
    Dernier message: 13/03/2009, 15h19
  2. Réponses: 2
    Dernier message: 05/03/2009, 15h52
  3. Réponses: 4
    Dernier message: 15/09/2008, 14h43
  4. appel d'une fonction dans un autre fichier jss
    Par Davee dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/06/2008, 20h12
  5. appel d'une fonction dans un autre fichier
    Par funboard dans le forum Langage
    Réponses: 2
    Dernier message: 08/02/2008, 09h26

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