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 :

Appeler une fonction avec un tableau à 2 dimensions?


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Appeler une fonction avec un tableau à 2 dimensions?
    Bonjour, (J'espère être au bon endroit)

    Je suis nouveau sur ce forum. J'ai une bonne connaissance du C mais je suis un novice avec C++/cli.

    Je travaille avec visual studio 2005.

    J'ai écrit un programme en C, sans interface, et j'essaie maintenant de le 'brancher' avec une interface c++ (une forme et des boutons) que j'ai créé avec visual studio.

    Dans mon programme C, j'utilise des tableaux de int à 2 dimensions (int [7][7]). J'ai donc plusieurs fonctions qui prennent ce tableau en paramètre. J'essaie donc d'appeler ces fonctions à partir des méthodes de ma forme.

    Je voudrais que ma forme contienne quelques tableaux à 2 dimensions, mais lorsque j'essaie d'ajouter une propriété int [7][7] à ma forme, je reçois le message d'erreur "C4368: impossible de définir courant comme membre de 'animation::Form1' managé: les types mixtes ne sont pas pris en charge".

    Je défini donc une variable comme étant un pointeur à un int :
    int *courant;
    et j'alloue l'espace nécessaire dans le constructeur :
    courant = (int *)malloc(196); (int[][7] ne fonctionne pas)

    Lorsque j'essaie d'appeler une de mes fonctions: (je suis dans le constructeur)
    initBoules(courant);
    je reçois un message d'erreur: "C2664: 'initBoules': impossible de convertir le paramètre 1 de 'int *' en 'int[][7]' "

    J'essaie donc différents cast:
    initBoules((int [][7])courant); erreur C2440
    initBoules(static_cast <int [][7]>(courant)); erreur C2440
    initBoules(reinterpret_cast <int [][7]>(courant)); erreur C2440
    initBoules(dynamic_cast <int [][7]>(courant)); erreur C2680

    Comment dois-je donc m'y prendre pour appeler ma fonction avec un tableau à 2 dimensions?

    Merci de votre aide.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 137
    Points
    23 137
    Par défaut
    Bonjour,

    courant est un int * or ta fonction demande un int **, il est impossible de faire un tel cast.

    Tu dois faire au minimum 2 allocations :
    - une pour toutes les valeurs à stocker.
    - une pour toutes les pointeurs sur le premier élément de chaque ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
             Tableau de 3 int *               Tableau de 3*3 int
    ptr ---->    ligne1       ----------> cellule1 - cellule2 - cellule3
                 ligne2       ----------> cellule1 - cellule2 - cellule3
                 ligne3       ----------> cellule1 - cellule2 - cellule3
    Je ne suis pas très doué en ASCII art

    Ainsi tu n'as plus qu'à passer ptr à ta fonction.

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    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 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    je conseille toujours de créer une classe/structure dédiée pour manipuler des tableaux à 2 dimensions en c++. Le c++ est orienté objet, donc nous avons tendance à tout encapsuler dans des objets

    Si tu choisis cette méthode, tu trouveras des milliers d'exemples sur le net.

    Sinon, si tu fais du c++/cli, tu devrais plutôt poster ta question dans le sous-forum dédié car c'est un peu particulier, surtout en ce qui concerne la mémoire.

    note: le sous-forum c++/cli est bien caché, il est là: http://www.developpez.net/forums/f38...l-cpp/cpp-cli/

Discussions similaires

  1. paramètrer une fonction avec un tableau de deux dimensions
    Par dark_geek dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/02/2010, 15h01
  2. [AC-2003] Comment appeler une fonction avec deux paramètres. Erreur '=' attendu
    Par nirG95 dans le forum VBA Access
    Réponses: 1
    Dernier message: 02/09/2009, 11h53
  3. Appeler une fonction avec un tableau en parametre ?
    Par devoluti0n dans le forum C++
    Réponses: 9
    Dernier message: 11/04/2008, 17h21
  4. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 15h54
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 19h48

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