Partage
  • Partager sur Facebook
  • Partager sur Twitter

conversion from char pb

    2 juin 2020 à 16:31:22

    Bonjour, en c++, j'ai une erreure quand je tente de passer un tableau en paramètre, que ce soit avec un poiteur ou TOUT le tableau. Voici l'erreur : invalid conversion from 'char (*)[10][10]' to 'char' [-fpermissive]

    le tableau est un tableau de char :

    char init_board()
    
    {
    
        char defaultBoard[10][10];
    
        int a = 0;
    
        while (a != 10)
    
        {
    
            defaultBoard[0][a] = '_';
    
            defaultBoard[9][a] = '_';
    
            defaultBoard[a][0] = '|';
    
            defaultBoard[a][9] = '|';
    
        }
    
        defaultBoard[8][4] = 'W';
    
        return &defaultBoard;
    
    }
    char printBoard(char *board)
    {
        for(int i = 0; i != 10; i++)
        {
            for(int j = 0; j != 10; j++)
            {
                if( j = 9 )
                {
                    std::cout << board[i][j] << std::endl;
                }
                std::cout << board[i][j];
            }
    
        }
        return 0;
    }

    et vu qu'on y est, il y a deux erreurs pour sortir les lignes du tableau : invalid types 'char[int]' for array subscript. Quand j'aurais la réponse je trouverais ça évident, mais là, rien ne me vient, j'ai tapé plusieurs fois l'erreur sur google, regardé le manuel, je ne trouve rien pouvant m'aider ou ayant résolue mon problème.

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      2 juin 2020 à 17:07:26

      Salut,

      Le soucis vient de la déclaration de ta fonction init_board() qui attend a retourner un char et non un tableau de tableau de char.

      Car oui defaultboard n'est pas de type char, mais de type char[][].

      De plus, quand bien même tu corrigerais ta fonction pour qu'elle retourne un char** par exemple, defaultboard est local a ta fonction puisque déclaré dans celle ci. Du coup, sorti de cette fonction, cette variable n'existe plus, tu ne peux donc pas la retournée.

      La solution ? passer par l'allocation dynamique (via malloc) ou bien passer ton tableau de tableau de char en parametre de ta fonction plutôt que de le déclarer dans celle ci.

      Edit : bordel on est sur le forum C++, je me croyais sur le forum C ... du coup je donne des conseils C ><

      Edit 2 : il existe pas mal de conteneur C++ plus adaptés que les tableaux C-style comme tu les utilise actuellement. Notamment std::array que je t'encourage a regarder.

      -
      Edité par ironwolf151 2 juin 2020 à 17:11:58

      • Partager sur Facebook
      • Partager sur Twitter
        2 juin 2020 à 18:31:01

        @ironwolf151 : Le code ressemblant à 95% à du C (on n'a normalement pas de fonction init...() en C++), en plus vouloir retourner un tableau, c'est typiquement une question de C car on doit y faire preuve d'astuce. Tout le monde aurait pu répondre avec du C.

        @LucasGaiodosSantos1 : si tu souhaites qu'une fonction retourne une donnée quelconque, le type de retour indiqué de la fonction doit être le type de l'objet qui sera retourné. Quel type d'objet peut-on retourner ? Tous les types sauf le type "tableau du C" qui est un restant qui déjà embête bien le C (en C non plus on ne peut pas retourner un tableau), et le pôvre C ne dispose pas de tous les objets du C++.
        Comme tu veux un tableau en 2 dimensions, en C++ on commencerait par créer type d'objet qui pourrait s'appeler Board, et qui aurait un constructeur plutôt qu'une fonction d'initialisation, et il pourrait contenir un std::array<std::array<char,10>,10> data; qui est l'équivalent objet de ton char data[10][10]. Oui ça à l'air plus compliqué à définir, mais ensuite ça s'utilise pareillement, et comme c'est un objet tu pourras le passer à tes fonctions.

        • Partager sur Facebook
        • Partager sur Twitter

        En recherche d'emploi.

        conversion from char pb

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown