none
une méthode qui doit allouer n bytes RRS feed

  • Question

  • bonjour;

    j'ai une méthode qui doit allouer N bytes dans un type donné
    mais je n'arrive pas à la compiler
    la méthode est:

            Registry_rep^ memoryM::Memory_allocte( unsigned int n)
    	{
    		Registry_rep^ temp;
    		temp = gcnew Registry_rep( n);
    		return( temp);
    	};
    

    et le compilateur me dit:

    1>..\..\..\..\Linguistic\ParserManager\src\memoryM.cpp(89): error C2664: 'Registry_st::Registry_st' : impossible de convertir le paramètre 1 de 'unsigned int' en 'Registry_st %'
    pourquoi veut il que le nombre de byte soit donnée en Registry_st%?
    ce qui obligerait en amont a typer les données, et alors on se mord la queue avec les cast invalides


    Jean Noël Martin

    vendredi 7 février 2014 17:41

Réponses

Toutes les réponses

  • thread lié à http://social.msdn.microsoft.com/Forums/fr-FR/45781131-66b3-4430-8f44-f9b71079cab1/un-type-manag-qui-nest-pas-reconnu-par-le-compilateur?forum=visualcplusfr

    Il faut faire un thread par question, oui, mais quand vous oubliez des détails pour pouvoir répondre c'est pas vraiment mieux.

    La question doit pouvoir se suffire à elle même.

    S'il y a beaucoup de détails, faites une références au thread avec les détails (mais vous verrez bien moins de personne prêtes à vous répondre).

    Donc comme j'ai déjà "suivi" le thread précédent, je peux donner des explications malgré le manque total d'informations utiles pour le diagnostic dans ce post.

    Vous n'avez toujours pas compris comment fonctionnent les constructeurs en C++ standard ?

    >pourquoi veut il que le nombre de byte soit donnée en Registry_st%?

    NON, c'est juste que vous avez paumé le compilateur et que le constructeur le plus proche qu'il est trouvé est 'Registry_st::Registry_st(Registry_st%)' , c'est le constructeur de copie de classe managée. Vous n'avez donc qu'à lui fournir un constructeur avec une signature de type 'Registry_st(unsigned int nbBytes):i(nbBytes){...;};'.

    Comme vous ne répondez JAMAIS aux questions, je n'ai toujours pas d'explication pour Registry_st à la place de Registry_rep, mais un simple héritage omis l'expliquerait.

    REPPRENEZ VOS COURS DE C++, MORT DIEU.

    Vous devez guider le compilateur et pas le perdre systématiquement en alignant aléatoirement des bouts de code très ici et là sur le Web, en espérant que ça marche.


    Paul Bacelar, Ex - MVP VC++

    vendredi 7 février 2014 19:06
    Modérateur
  • J'ai donc repris votre constructeur de copie et l'ai mis à la place du mien:

    typedef ref struct Registry_st
    {
    public:
      System::Int32^ i;// 31
      unsigned int ht_size;
      RegistryRecord^ hash_table;	 // First record of directory
      Registry_CompareFunc comp_fun; // Comparison function
      Registry_HashFunc hash_fun;	 // Hash function
      unsigned int record_count;	 // Number of records in the registry
      Registry_st(System::Int32^ nbBytes):i(nbBytes){...;} // 37 constructeur de copy R(R% r) : i(r.i) {}
      ~Registry_st(){;};
    }Registry_rep; 

    ainsi vous avez une réponse à une des questions que vous posez: Regitry_st est la classe et Registry_rep est la variable associée à la classe.

    mais le compilateur me dit que ce n'est pas encore la bonne syntaxe:

    il adresse la ligne 37 du constructeur de copy:

    1>E:\usr\Memoria\dev\Linguistic\ParserManager\com\BrillTypeM.h(37): error C2143: erreur de syntaxe : absence de ';' avant '...'
    1>..\..\..\..\Linguistic\ParserManager\src\memoryM.cpp(89): error C2664: 'Registry_st::Registry_st(System::Int32 ^)' : impossible de convertir le paramètre 1 de 'unsigned int' en 'System::Int32 ^'
    1>          Aucun opérateur de conversion défini par l'utilisateur disponible, ou
    1>          Il n'existe pas de conversion standard de la forme boxed du type arithmétique en type cible


    Jean Noël Martin

    samedi 8 février 2014 14:58
  • >Registry_st(unsigned int nbBytes):i(nbBytes){...;};

    Paul Bacelar, Ex - MVP VC++


    dimanche 9 février 2014 22:45
    Modérateur