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 :

Erreur 2106 et 2440


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Erreur 2106 et 2440
    Bonjour,
    Je suis en train d’écrire des dll en c++ pour accélérer un moteur d'échecs que j'ai codé en python. Etant vraiment débutant en c++, je me heurte à quelques problèmes. Votre aide me serait utile.

    ici, le compilateur me renvoie l'erreur 2106 à la ligne 7 alors que "lMouv" est un tableau 2d.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                    int lMouvPiece[30][4]=all_mouv(x, y, table);
                    for(int i2=0; i2<30; i2++)
                    {
                        if(lMouvPiece[i2]!=mouv)
                        {
                            lMouv[i]=lMouvPiece[i2];
                            i++;
                        }
                        else
                        {
                            break;
                        }
                    }
    là, il bloque au return
    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
     
    float** bouger(float table[8][8], int mouv[4])
    {
        // on copie table en table2
        float table2[8][8];
        for(int x=0; x<8; x++)
        {
            for(int y=0; y<8; y++)
            {
                table2[x][y]=table[x][y];
            }
        }
     
        // on deplace la piece
        table2[mouv[2]][mouv[3]]=table2[mouv[0]][mouv[1]];
        table2[mouv[0]][mouv[1]]=0.0;
     
        return table2;
    }
    Merci de vos réponses,
    Coban

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Salut,

    Il n'y a pas d'erreurs plus explicites qu'un simple numéro ? Pour savoir à quoi correspond l'erreur il faut déjà savoir quel est le compilateur. Mais je crois qu'il n'y a que visual studio pour mettre des numéros...

    Pour la première erreur: tu ne peux pas retourner de tableau. Un référence sur un tableau oui. Mais tu ne peux pas initialiser un tableau avec le retour d'une fonction.
    Soit il faut changer all_mouv pour prendre une référence sur un tableau pour l'initialiser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void all_mouv(int x, int y, ??? table, int (&pieces)[30][4]);
    Soit passer par une structure qui contient le tableau (voir std::array ou boost::array) qui s'occupera de faire une copie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::array<int[4], 30> all_mouv(int x, int y, ??? table);
    La seconde erreur vient tu fais qu'1/ la fonction ne retourne pas un tableau à 2 dimensions (*) 2/ que la fonction retournes un tableau local à une fonction (en fait juste son adresse) et le tableau n'existe plus à la sortie de la fonction.
    Voir allocation dynamique, std::vecteur ou std::array/boost::array (mieux ici).

    Par contre, la fonction bouger ne fait pas ce qu'elle dit. Les valeurs ne changent pas, elles sont copier (2 fois) et modifier (donc 2 choses), les copies sont de trop.
    Perso j'aurais envoyer table par référence pour que bouger() le modifie. S'il y a besoin d'une copie, je l'aurait mit avant l'appel à la fonction. En passant par std::array, la copie ne fait qu'une ligne (table_copie = table).
    J'aurais aussi envoyer 4 valeurs plutôt qu'un tableau mouv. Mais question de préférence j'imagine.

    Regarde ce qu'est une référence, je pense qu'il te manque cette notion ; ça te permettras de simplifier ton code. Regarde aussi les principes du const-correctness, ça ne peux pas faire de mal ^^.

    * un float** ne peux être un tableau 2D. C'est au mieux un tableau de pointeur sur float. (même si tableau n'est pas approprier dans ce cas de figure). Pour bien le comprendre il faut faire une représentation de la mémoire. J'ai pour le moment la flemme de sortir mes crayons de couleurs ^^.

Discussions similaires

  1. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 22h20
  2. Check Url pour savoir si erreur 404 ou si le site existe
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 13h49
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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