web-dev-qa-db-fra.com

Qu'est-ce qu'une extension C ++ 11 [-Wc ++ 11-extensions]

J'ai besoin d'aide pour comprendre où cette erreur se produit:

avertissement: l'initialisation en classe d'un membre de données non statique est une extension C++ 11 [-Wc ++ 11-extensions]

Voici la section du code dont il provient:

typedef struct Hand {
    bool straight = false;
    bool flush = false;
    bool four = false;
    bool three = false;
    int pairs = 0;
    } Hand;
7
Matthew Montefusco

Ce n'est pas une erreur, c'est un avertissement. Il vous indique que vous n'êtes autorisé à initialiser que les membres non statiques d'une structure/classe commençant par la norme C++ 11 (ainsi appelée car elle a été publiée en 2011). Avant cela, vous n'étiez pas officiellement autorisé par C++ 98 (publié, vous l'avez deviné, en 1998). Pour faire court, ce que vous faites n'est devenu légal et officiel C++ qu'en 2011. La valeur par défaut de votre compilateur semble être la norme de 1998.

Essayez de compiler avec -std=c++11 comme indicateur de ligne de commande (en supposant que vous utilisez GCC ou clang), et l'avertissement devrait disparaître. Si vous utilisez un compilateur différent, il devrait également y avoir un indicateur (s'il est suffisamment récent pour implémenter C++ 11).

14
Razvan Cojocaru