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 :

float* -> float[][4]


Sujet :

C++

  1. #1
    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 float* -> float[][4]
    Bonjour,

    J'ai une fonction d'API qui attend en param�tre un float[][4].

    Je lui envoie un pointeur float*, et Visual C++ m'envoie bouler :
    impossible de convertir le param�tre 1 de 'float *' en 'double [][4]'

    Y aurait-il quelque chose qui m'a �chapp� ?

    Merci.

  2. #2
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    Par d�faut
    Les types sont incompatibles entre eux !
    Un float* n'a rien � voir avec un float[][4] !

    Exemple d'un code qui fonctionne :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void fonction (float test[][4])
    {
    	std::cout << "fonction" << std::endl;
    }
     
    int main()
    {
    	float var[2][4];
    	fonction(var);      
    }

  3. #3
    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
    Le probl�me avec ton code est que je ne connais pas la taille d'une des dimensions du tableau lors de la d�claration. Je dois donc utiliser des pointeurs.

    Comment devrais-je donc d�clarer et allouer mon pointeur pour qu'il corresponde � un tableau bidimensionnel ?

    Merci.

  4. #4
    Membre exp�riment�
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    190
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 190
    Par d�faut
    Salut,

    Tu peux faire quelque chose comme:
    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 <iostream>
     
    using namespace std;
     
     
     
    void test(float tab[][4])
    {
     
      cout << tab[5][3] << endl;
     
      return;
     
    }
     
     
    int main(void)
    {
     
      float (*tab) [4]=NULL;
     
      tab=new float [10][4];
      tab[5][3]=12;
      test(tab);
      delete tab;
     
      return 0;
     
    }

  5. #5
    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
    Merci !

    Et pour la ligne suivante :

    y a-t-il moyen de d�clarer une variable membre float*, et de retomber par la suite ce que tu m'as sugg�r� par une affectation qui pr�cise le type du pointeur ?

  6. #6
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut
    Tout ceci est du C.

    En c++, on utilisera une classe/structure et et conteneur. Par exemple:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    struct QuatreFloat
    {
        float tab[4];
    };
     
    std::vector<QuatreFloat> monTableau;
    Ca peut paraitre plus compliqu�, � premiere vue, qu'un tableau "C style" � 2 di�ension , mais en fait le c++ fourni tant d'outil pour manipuler une telle structure qu'au final l'utilisation est plus simple, plus sure, souvent plus rapide, etc.

  7. #7
    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
    Ouaip, mais la fonction de l'API que j'utilise demande un float[][4] (alors que c'est une API C++...).

    Si tu veux d�placer ma question dans la section du C, je n'y verrai aucun inconv�nient.

  8. #8
    Membre exp�riment�
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    190
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 190
    Par d�faut
    Citation Envoy� par oodini Voir le message
    Merci !

    Et pour la ligne suivante :

    y a-t-il moyen de d�clarer une variable membre float*, et de retomber par la suite ce que tu m'as sugg�r� par une affectation qui pr�cise le type du pointeur ?
    Je n'ai pas bien compris ce que tu veux faire, pourrais-tu donner un exemple.

  9. #9
    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
    Je crois que j'ai trouv� mon bonheur sur la page suivante :

    http://c-faq.com/aryptr/ary2dfunc3.html
    (notamment le lien en bas de page)

    Je suis en train d'appliquer ce qui est expliqu�, et j'arrive � quelque chose comme :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    float **mCVs;
    mCVs = (float **)malloc(rows * sizeof(float *));
    for(int i = 0; i < rows ; i++)
    	mCVs[i] = (float *)malloc(4 * sizeof(float));
    Je devrais ensuite pouvoir envoyer mCVs en tant que param�tre d'une fonction qui attend un float[][4].

  10. #10
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Sauf que c'est compl�tement du C, et surtout �a ne donne pas un tableau de tableaux mais un tableau de pointeurs vers des tableaux.

    Absolument pas ce qu'il faut pour une fonction demandant un float (*)[4].
    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
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Je propose:
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    typedef float QuatreFloat[4];
    std::vector<QuatreFloat> monTableau;
     
    //Et pour montrer que ça marche,
    //cette ligne devrait compiler:
    float (*ptr)[4] = &monTableau[0];
    Ainsi tu profites de la fonctionnalit� des vecteurs et tu as vraiment un tableau de float[4]...
    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.

  12. #12
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    Par d�faut
    Citation Envoy� par oodini Voir le message
    Ouaip, mais la fonction de l'API que j'utilise demande un float[][4] (alors que c'est une API C++...).
    Une API C++ prend cette chose en param�tre ? Je demande � voir !

  13. #13
    Membre �clair� Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par d�faut
    Je viens bien comprendre que l'API demande un float [][4] sortit d'on ne sait o� mais de l� � utiliser des mallocs ...


  14. #14
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Je confirme.
    La seule raison qui pousserait � utiliser malloc() serait que la biblioth�que fasse un free() sur le pointeur pass�. Et ce serait une mauvaise raison, car toute resource allou�e par un module doit �tre d�sallou�e par le m�me module.
    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.

  15. #15
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    Par d�faut
    Oui, tout �a est particuli�rement sale...

    On peut savoir quelle API demande �a ?

  16. #16
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut
    Des noms, des noms!!!



    Citation Envoy� par oodini
    Si tu veux d�placer ma question dans la section du C, je n'y verrai aucun inconv�nient.
    Bah je ne sais pas trop... si c'est une API c++...

  17. #17
    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
    Citation Envoy� par poukill Voir le message
    Oui, tout �a est particuli�rement sale...

    On peut savoir quelle API demande �a ?
    Il s'agit d'Autodesk Maya, dans la classe MPointArray :
    http://www.kxcad.net/autodesk/maya/M...ointArray.html
    Comme vous pourrez le voir, le tableau pass� en param�tre est destin� � �tre rempli par les fonctions (par get(), par exemple).

    Le but est de transformer ce tableau d'instances de classe MPoint (4 coordonn�es) en un tableau unidimensionnel de flottants.

    Ne leur jetez pas la pierre : je dois justement envoyer toutes ces donn�es � une autre API, qui est C, celle-l�...

  18. #18
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    Par d�faut
    Ouais m'enfin un tableau de points, je l'aurai plut�t �crit :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::vector< std::pair<T, T> > m_TableauPoints;
    L'interface n'est quand m�me pas top top... Apr�s si �a convient, tant mieux...

  19. #19
    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
    Je ne me souviens pas avoir vu une seule fois dans cette API une quelconque d�pendance � la STL. Sans doute un choix politique...

    Par ailleurs, comme je dois envoyer les donn�es � une API C, passer par la STL m'obligerait � dupliquer les donn�es. Elles seraient donc pr�sentes 3 fois en m�moire :

    1 - Dans la sc�ne Maya
    2 - Dans la structure de donn�es utilisant la STL
    3 - Dans l'espace m�moire que j'envoie � l'API C

    La RAM �tant un probl�me crucial dans les sc�nes 3D, ce n'est pas plus mal de bosser sur ces structures de donn�es primitives...

Discussions similaires

  1. Probl�me float java � float sql
    Par littlebear dans le forum D�buter avec Java
    R�ponses: 1
    Dernier message: 28/03/2012, 18h39
  2. Conversion Float en float
    Par RouRa22 dans le forum D�buter avec Java
    R�ponses: 6
    Dernier message: 31/07/2009, 15h00
  3. Pb de formatage de champs de type float
    Par FrankyNormand dans le forum XMLRAD
    R�ponses: 9
    Dernier message: 05/05/2005, 12h37
  4. [7RC3] Formatage de champs float
    Par Sylvain Leray dans le forum XMLRAD
    R�ponses: 2
    Dernier message: 19/05/2003, 09h38
  5. probleme d'insertion d'un Float
    Par neness dans le forum D�buter
    R�ponses: 3
    Dernier message: 07/01/2003, 12h32

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