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 :

Classe non reconnue


Sujet :

C++/CLI

  1. #1
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Classe non reconnue
    bonjour,
    J'ai un namespace IBPP qui contient une classe Exception
    Je vous met le code corespondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    namespace SpecificationLoader
    {
      namespace IBPP
      {
      (...)
    	class Exception : public std::exception
    	{
    	public:
    		virtual const char* Origin() const throw() = 0;
    		virtual const char* ErrorMessage() const throw() = 0;	// Deprecated, use what()
    		virtual const char* what() const throw() = 0;
    		virtual ~Exception() throw();
    	};
    et je l'utilise dans une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    			terme1 = "Index #";
    			terme2 = "\n";
    			terme3 = "Error: ";
    			ErrorT = (char*)exception.IBPP::Exception::What();
    			ErrorString = terme1 + terme2 + terme3 + ErrorT + terme2;
    ce qui conduitl ecompilateur à produire un message inchoerent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManagerM.cpp(258): error C2039: 'What'*: n'est pas membre de 'SpecificationLoader::IBPP::Exception'
    1>          D:\usr\Memoria\dev\DBMS\OnLineDBManager\ibpp-2-5-3-1-src\core\ibpp.h(174)*: voir la déclaration de 'SpecificationLoader::IBPP::Exception'
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManagerM.cpp(258): error C2039: 'What'*: n'est pas membre de 'SpecificationLoader::IBPP::Exception'
    1>          D:\usr\Memoria\dev\DBMS\OnLineDBManager\ibpp-2-5-3-1-src\core\ibpp.h(174)*: voir la déclaration de 'SpecificationLoader::IBPP::Exception'
    qui m'aidera sera

  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
    Euh, what contre What?

    j'ai remarqué que bon nombre de tes questions révélaient une ignorance non seulement du C++/CLI, mais aussi du C++ natif.
    Or C++ est un langage dont on a intérêt à maîtriser complètement les bases (classes, inclusions etc.) avant de se lancer dans le C++/CLI...

    Aussi:
    Le compilateur est là pour attirer ton attention sur ces fautes. On ne devrait pas avoir à les traduire pour toi. Comment veux-tu espérer programmer si tu ne comprends pas ce que dit le compilateur sur des cas si simples?

    PS: Pourquoi fais-tu un cast qui efface le const pour ta variable ErrorT? Tu devrais probablement changer sa déclaration.
    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
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut J'ai chagé...
    J'ai changé Le type de ErrorT et retirer le cast.
    ça n'a rien changé What() est membre de IBPP::Exceptio d'après le source de ibpp.h dont j'ai fourni un extrait pour la déclaration. et ce n'est pas ce que dit le compilateur

  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
    • Ton extrait de code source dit que what() est membre de la classe, mais ne fait aucune mention de What().
    • La sortie du compilateur dit que What() n'est pas membre de la classe, mais n'a absolument pas à se plaindre de what().

    Il n'y a donc pas de désaccord entre compilateur et code source de la déclaration.
    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
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut La solution
    est de choisir system::exeption^

  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
    Sauf que ce n'est pas du tout le même genre d'exception, ce n'est pas lancé pareil (lancé sur le tas alors qu'une exception C++ est lancée par valeur et attrapée par référence), et ça ne contient pas non plus de fonction What().
    Il faut savoir avec quoi tu traites: Soit tu traites avec du code natif qui lance des exceptions C++, soit tu traites avec du code managé qui lance des exceptions .Net. Il faut adapter ton try/catch au code appelé, et non l'inverse.
    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
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut La solution
    plus détaillée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    			terme1 = "Index #";
    			terme2 = "\n";
    			terme3 = "Error: ";
    			ErrorMessage = exception->Message;
    			const wchar_t* content = StringToHString( ErrorMessage);
    			std::wstring result( content, ErrorMessage->Length);
    			char* s = CStrConv::awcstombs( result.c_str());
    			ErrorT = s;
    			CStrConv::StrFreeA( s);
    			ErrorString = terme1 + terme2 + terme3 + ErrorT + terme2;
    			// edit( char* final_err_buff )
    			edit( ErrorString.c_str());
    	}; // 1

  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
    Quel est le type de ErrorT?
    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
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut La solution( ter)
    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
    	void CInterbaseManager::Display( Exception^ exception)
    	{ // 1
    	   	std::string terme1;
    		std::string terme2;
    		std::string terme3;
    		std::string ErrorString;
    		const char* ErrorT;
    		const wchar_t* chars;
    		System::String^ ErrorMessage;
    		std::wstring result;
     
    			terme1 = "Index #";
    			terme2 = "\n";
    			terme3 = "Error: ";
    			ErrorMessage = exception->Message;
    			chars = (const wchar_t*)(Marshal::StringToHGlobalUni( ErrorMessage)).ToPointer();
    			result.append( chars);
    			Marshal::FreeHGlobal(IntPtr((void*)chars));
    			char* s = CStrConv::awcstombs( (wchar_t*)result.c_str());
    			ErrorT = s;
    			CStrConv::StrFreeA( s);
    			ErrorString = terme1 + terme2 + terme3 + ErrorT + terme2;
    			// edit( char* final_err_buff )
    			edit( (char*)ErrorString.c_str());
    	}; // 1

  10. #10
    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
    Y'a pas un truc qui te dérange là-dedans?
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    const char* ErrorT;
    ...
    char* s = CStrConv::awcstombs( (wchar_t*)result.c_str());
    ErrorT = s;
    CStrConv::StrFreeA( s);
    ErrorString = terme1 + terme2 + terme3 + ErrorT + terme2;

    PS: Et aussi, pourquoi le cast dans awcstombs( (wchar_t*)result.c_str());? Une fonction de conversion n'est pas censée modifier la chaîne source, donc ne devrait pas avoir besoin d'un pointeur non-const...

    PPS: D'ailleurs, pour les rares cas où un cast qui supprime le const est vraiment indispensable, préférer const_cast aux casts C-style: const_cast a le mérite d'être recherchable.
    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.

  11. #11
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut J'ia essayé
    J'ia essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    			Marshal::FreeHGlobal(IntPtr((void*)chars));
    			char* s = CStrConv::awcstombs( (const_cast)result.c_str());
    et le compilateur a répondu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManagerM.cpp(264): error C2059: erreur de syntaxe*: ')'
    1>
    puis j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* s = CStrConv::awcstombs( (const wchar_t*)result.c_str());
    et le comilateur a répondu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManagerM.cpp(264): error C2664: 'SpecificationLoader::CStrConv::awcstombs'*: impossible de convertir le paramètre 1 de 'const wchar_t *' en 'wchar_t *'
    1>          La conversion perd les qualificateurs
    je suis donc revenu à la solution (3).

  12. #12
    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
    C'est la méthode CStrConv::awcstombs() qui est à corriger, avant de pouvoir corriger l'appel.
    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.

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

Discussions similaires

  1. Classe non reconnue lors de la publication sur Internet
    Par Delphi-ne dans le forum ASP.NET
    Réponses: 16
    Dernier message: 28/01/2011, 13h19
  2. Erreur, classe non reconnue
    Par tet2brick dans le forum Langage
    Réponses: 7
    Dernier message: 24/09/2010, 10h48
  3. class non reconnu :S
    Par vb_boycotter dans le forum ASP.NET
    Réponses: 4
    Dernier message: 19/05/2009, 11h25
  4. Classe non reconnu projet
    Par Hurin dans le forum ASP.NET
    Réponses: 6
    Dernier message: 06/06/2008, 11h49
  5. Classe non reconnue et pourtant bel-et-bien inclue
    Par Vitaly dans le forum Langage
    Réponses: 19
    Dernier message: 18/07/2007, 00h45

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