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++/CLI Discussion :

simple passage et utilisation d'un contrôleur dans une Form (C++/CLI)


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Par défaut simple passage et utilisation d'un contrôleur dans une Form (C++/CLI)
    Bonjour, pour un travail en C++ j'ai voulu tenter de faire une application C++/CLI pour créer rapidement une fenêtre avec les composants .Net que j’ai déjà utilisés.

    J’ai tenté un peu près toute les possibilités que j’ai imaginé mais impossible de trouver une solution, je débute, il doit y avoir certainement quelque choses que je ne dois pas connaitre.

    Il ne me reste plus comme unique solution de demander l’aide de programmeur plus expérimenter !

    Le code est très simple un main instancie un contrôleur, le contrôleur ouvre une fenêtre et passe à l’objet fenêtre un pointeur (this) sur lui-même, et ensuite j’essaye d’utiliser une fonction du contrôleur à partir de ma fenêtre.
    Mais j’ai cette erreur :

    [ConnectionWindow.h]
    error C2227: la partie gauche de '->fadeOutConnection' doit pointer vers un type class/struct/union/générique

    error C2027: utilisation du type non défini 'MainController'

    Voici tout d'abord le main:

    Main.CPP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    [windowForm::STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
    	MainController mainController;
    	return 0;
    }
    Voici la classe controller.h, je l'ai mis le mot clés "ref" pour en faire une classe managé pour stocker l'objet fenêtre ConnectionWindow(impossible autrement si j 'ai bien compris C++/CLI)

    mainController.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ref class MainController
    {
    using namespace windowForm;
    private :
    	ConnectionWindow ^ connectionWindow;
     
    public :
    	MainController();
    	~MainController();
    	void fadeOutConnection();
    };
    mainController.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include "stdafx.h"
    #include "mainController.h"
     
    MainController::MainController()
    {
    	connectionWindow = gcnew ConnectionWindow(this);
    	windowForm::Application::Run(connectionWindow);
    }
     
    void MainController::fadeOutConnection(){
     
    }
    Et voici la form ConnectionWindow

    ConnectionWindow.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
    28
    29
    30
    31
    ref class MainController;
    
    namespace windowForm {
    
    	using...
    
    	public ref class ConnectionWindow : public System::Windows::Forms::Form
    	{
    	public:
    		ConnectionWindow(MainController ^ mainController)
    		{
    			this->mainController = mainController;
    			InitializeComponent();
    		}
    
    
    ...
    
    	private: MainController ^ mainController;
    
    ...
    		
    
    #pragma region Windows Form Designer generated code
    // Code généré
    #pragma endregion
    	private: System::Void buttonGoConnection_Click(System::Object^  sender, System::EventArgs^  e) {
    
    				mainController->fadeOutConnection();
    			 }
    La ligne en rouge est celle qui crée l'erreur , je ne comprend pas du tout

    Un grand merci d'avance! bonne soirée!

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Tes ref et tes ^, ce n'est pas du C++.

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Par défaut
    Peux-tu être plus explicite, car je ne vois pas où est mon erreur.

    Je sais que ^ est un pointeur d'objet managé et % une référence d'objet managé.

    C'est pour cela que j'ai déclaré mainController dans la classe form de cette façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private: MainController ^ mainController;
    Ce n'est pas juste?

  4. #4
    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
    @oodini: Il a bien dit qu'il s'agissait de C++/CLI, pas de C++ standard. Sa seule erreur ici a été de ne pas savoir qu'il y a un forum spécifique pour ça, qui n'est pas visible depuis l'index.

    @Cipofab: Ton programme ne serait-il pas plus simple si tout était dans le même namespace? Vérifie qu'il n'y a pas un problème de ce côté-là.
    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
    Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Par défaut
    @médinoc: je ne savais pas qu'il y avait un forum dédié au C++/CLI je vais reposter ça dans le bon forum, merci pour l'information. (si un admin pass, ce sujet peut être supprimé)

    NdlM : discussion déplacée.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    Vérifiez que vous avez bien fait l'include de "mainController.h" au début de "ConnectionWindow.h".

    Vérifiez aussi les namespaces, le namespace sans non n'est pas implicitement ajouté à la liste des using.

    Vous risquez de tomber sur le problème classique du C++ des classes croisées, très suspect car souvent révélateur de problème de conception. (forward definition)

    Vos 2 classes sont trop liées.

Discussions similaires

  1. Réponses: 8
    Dernier message: 10/02/2013, 16h34
  2. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  3. Réponses: 7
    Dernier message: 18/05/2005, 15h09
  4. [servlet][formulaire] utilisation de 2 servlet dans 1 form
    Par luc_pichot dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 26/05/2004, 17h55

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