Syntaxe pour une liste d'initialisation d'un tableau.

retrouve pas la syntaxe

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Suite au précédent post, je suis confronté à problème de syntaxe que je ne maitrise pas.

J’ai fait un objet avec une variable membre qui est un tableau d’une class plus simple (un tableau de cellule). Je coince dans la syntaxe pour faire une liste d’initialisation de la variable membre.

Ci-dessous le code simplifier.

#include <array>
#include <iostream>

class cell{
private:
    std::array <bool, 10> m_bool {true, true, true, true, true, true, true, true, true, true};
};

class board {
public:
    board (std::string const& filename);
private:
    std::array <cell, 9*9> m_cell; // <-- C'est quoi la syntaxe ?
};

board::board (std::string const& filename)
{
    std::ifstream myFlow(filename);
    if(myFlow)
    {
// ...

je compile avec (GCC, issue 9) avec l’obtion -Weffc++, et le compilateur me trouve comme erreur:

../toBeDeleted/main.cpp:23:1: warning: ‘board::m_cellshould be initialized in the member initialization list [-Weffc++]
   23 | board::board (std::string const& filename)
      | ^~~~~

Merci d’avance pour votre aide.

Les vérifications d’effective C++ ne sont pas des plus efficaces dans mes souvenirs. J’ai souvenirs de quelques faux positifs à vouloir appliquer aveuglément certaines règles à la formulation incomplète.

D’ailleurs, il n’y a rien à faire, cela me parait initialisé: https://gcc.godbolt.org/z/5r6oKzPE5

Au pire tu peux rajouter un std::array <cell, 9*9> m_cell{};

PS: pour mon sudoku (ton code a l’air d’y ressembler), je me suis amusé avec mdarray et mdspan.

Bonjour LMGHS,

En effet, il s’agit d’un essai de résolution de sudoku (S’y suis presque, mais pas complétement, …)

Merci pour ta réponse.

Je profite de ce post pour compléter. Pour l’initialisation par défaut d’un array, il n’y a pas une syntaxe avec le nombre de valeurs et la valeur par défaut, il me semble avoir vu ça mais je ne retrouve pas.

std::array <bool, 10> m_bool {true, true, true, true, true, true, true, true, ...

C’est pas beau, et si au lieux de 10, j’avais une constante, ça ne marcherait pas.

Cordialement.

Vu que c’est un agrégat je crains que non. Et la vieille feinte du C ne permet que de mettre à faux — c’est l’équivalent de int tab[42] = {0};

Note qu’elle implique d’utiliser un signe égal cette fois. Ta déclaration de membre devenant std::array <bool, 10> m_bool = {}; —> https://gcc.godbolt.org/z/5drMPPvKs

EDIT: on peut tricher en passant par un intermédiaire, mais le résultat produit est plus compliqué cette fois. Il y a des sub&cie au lieu de renvoyer directement 1: https://gcc.godbolt.org/z/vfbG8xvoY

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte