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 :

Ouvrir un header depuis un autre header


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 5
    Points : 0
    Points
    0
    Par défaut Ouvrir un header depuis un autre header
    Bonjour,

    je rencontre un problème concernant l'ouverture de nouvelles fenêtres suite à un événement en C++. J'utilise Visual Studio 2010, et je suis en train de développer un mini Paint pour mes études. Le soucis étant que, quand je clique sur un bouton "Nouvelle image", j'aimerais qu'une pop-up s'ouvre demandant les dimensions de l'image à l'utilisateur. J'ai donc un header principal Form1.h, que j'ai utilisé pour programmer la fenêtre principale, et j'aimerais ouvrir la pop-up depuis un autre fichier du même projet (que j'ai nommé NewImageSize.h). Or quand j'essaye d'appeler ledit fichier comme suit: "TP_Paint::NewImageSize", le logiciel me retourne une erreur de build disant que "NewImageSize n'est pas membre de TP_Paint".

    Le pire, c'est que j'ai testé "NewImageSize->lolilol" et qu'il me sort "lolilol: is not a member of TP_Paint::NewImageSize". Pour moi ça veut bien dire que NewImageSize est bel et bien membre de TP_Paint, alors pourquoi me dit-il que non?

    Enfin bref, c'est à devenir fou. Comment m'y prendre pour ouvrir la fenêtre programmée dans NewImageSize.h depuis Form1.h? Et comment faire pour retourner les variables représentant la taille choisie par l'utilisateur de NewImageSize vers Form1?

    J'ai beau essayé tous les types de codes que je peux trouver, je ne trouve rien qui fonctionne.

    Pour résumer:

    TP_Paint est le nom du projet
    Form1.h est le header principal
    NewImageSize.h est le header représentant la pop-up demandant la taille de la nouvelle image désirée

    Merci d'avance.

    PS: j'essayais d'utiliser le code suivant pour charger la fenêtre, sans succès:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NewImageSize frm;
    frm.ShowDialog();
    L'erreur étant "NewImageSize: undefined identifier".

    EDIT: #include<NewImageSize.h> dans Form1.h ne fonctionne pas: "No such file or directory". Alors que #include<Form1.h> dans NewImageSize.h fonctionne... Je n'y comprends rien!

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Peux-tu joindre un zip de ton projet C++/CLI? Car là, on n'a pas vraiment ce qu'il faut pour reproduire l'erreur.
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    Voilà j'ai mis ça.

    Bon je débute en C++, alors pataper si je fais des choses pas comme il faut!

    J'aimerais donc ouvrir la fenêtre programmée dans NewImageSize.h lors d'un clic sur le menu Fichier->Nouveau de la fenêtre principale (Form1.h).

    Merci!
    Fichiers attachés Fichiers attachés

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Note que ce n'est pas du C++ ordinaire, c'est du C++/CLI, pour le Framework .Net.

    Déjà, dans la classe NewImageSize, tu traites mal l'événement Load(). Il ne faut surtout pas rappeler ShowDialog() dedans, et aussi lors du début tu devrais faire tes affectations dans l'autre sens (comme ça, la fonction qui l'utilise peut régler les valeurs avant d'afficher la boîte).

    De plus, (et là c'est un reproche que je fais à Microsoft pour avoir montré le mauvais exemple), la plupart des fonctions de la classe Form1, surtout les grosses et surtout celles qui utilisent d'autres classes, devraient être seulement déclarées dans la définition de la classe, et définies dans le .cpp.


    Une dernière chose: C++/CLI n'est vraiment pas un langage pour débuter. Je conseillerais de connaître déjà très bien C++ et ses principes de base (classe, compilation séparée, séparation header/cpp, où définir les fonctions membres selon leur type, etc.) avant de s'attaquer au langage C++/CLI.

    Pour débuter avec .Net, je recommande le langage C#.
    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.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    Ok merci je vais essayer de suivre tes conseils.

    Le soucis c'est que dans mon année d'études, on m'a directement balancé dans Visual Studio en C++, donc je n'ai jamais rien pu faire avant, aucune base, aucun autre langage... J'essaye de m'adapter rapidement, pas forcément de la bonne façon c'est sûr!

    En revanche, je ne sais toujours pas comment ouvrir ma seconde fenêtre de NewImageSize! (ShowDialog dans Load() c'était du test que j'ai oublié d'enlever ^^)

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le classique pour une boîte de dialogue modale, c'est:

    Code C++/CLI : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MaClasseDialogue^ dlg = gcnew MaClasseDialogue();
    dlg->UneVariable = valeurInitiale;
    if(dlg->ShowDialog(this) == DialogResult::OK)
    {
    	maVariable = dlg->UneVariable;
    	//faire ce qu'on voulait avec le résultat de la boîte de dialogue
    }
    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.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    Voilà justement où est le problème: je n'arrive pas à utiliser le fichier NewImageSize.h de mon projet! Si je l'utilise (enfin, si j'utilise la classe qui est dedans je veux dire) de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewImageSize^ dlg = gcnew NewImageSize();
    L'erreur retournée est NewImageSize: undeclared identifier.

    Aussi, quand je trifouille pour trouver ce qui ne va pas et que j'utilise le code suivant:

    L'erreur retournée est NewImageSize: undeclared identifier + NewImageSize n'est pas membre de TP_Paint. Alors que quand je vais voir les propriétés de mon fichier NewImageSize.h, la propriété FullName est bien TP_Paint::NewImageSize...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Là, je crois qu'il faut repartir sur les bases du C++ et du C++/CLI.
    Il y a deux façons de définir les méthodes d'une classe:
    Code C++/CLI : 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
    //UneClasse.h
    #pragma once
     
    namespace UnNamespace
    {
     
    public ref class UneClasse
    {
    public:
    	void UneMethodeDefinieDansLaClasse() {
    		System::Console::WriteLine(L"Salut!");
    	}
    	void UneMethodeDefinieApresLaClasse();
    };
     
    }//namespace UnNamespace
    Code C++/CLI : 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
    //UneClasse.cpp
    #include "UneClasse.h"
    #include "UneAutreClasse.h"
     
    namespace UnNamespace
    {
     
    void UneClasse::UneMethodeDefineApresLaClasse()
    {
    	System::Console::WriteLine(L"Coucou!");
    	//Ici, normalement je peux utiliser UneAutreClasse
    	UneAutreClasse^ obj = gcnew UneAutreClasse();
    }
     
     
    }//namespace UnNamespace
    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.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    Aaaaah ok!!! Je pense comprendre et avoir les outils nécessaires pour résoudre mon problème maintenant! Je pense aussi comprendre pourquoi utiliser le .cpp plutôt que le .h de la façon que tu m'as décrite plus haut.

    Merci pour tes conseils!

Discussions similaires

  1. Ouvrir un .htm depuis un autre projets
    Par HULK dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/06/2011, 16h19
  2. Réponses: 2
    Dernier message: 21/08/2009, 08h38
  3. [AC-2003] Ouvrir un formulaire depuis un autre
    Par KANIN dans le forum IHM
    Réponses: 1
    Dernier message: 24/06/2009, 17h22
  4. Ouvrir un compte depuis un autre disque
    Par ESVBA dans le forum Sécurité
    Réponses: 6
    Dernier message: 24/02/2009, 21h01
  5. VBA : ouvrir une macro depuis une autre BDD
    Par crovette51101 dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/05/2007, 08h09

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