Ce este o extensie C++11 [-Wc++11-extensions] (Programare, C++, C++11, Avertismente, Typedef, În Inițializarea Clasei)

Matthew Montefusco a intrebat.

Am nevoie de ajutor pentru a înțelege unde apare această eroare:

avertisment: inițializarea în clasă a unui membru de date non-static este o extensie C++11 [-Wcc++11-extensions]

Aceasta este secțiunea de cod din care provine:

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

Comentarii

  • eliminați inițializatoarele ,, toate elementele = false; și = 0; Aceasta este doar o definiție a struct Hand, va trebui să inițializați câmpurile atunci când veți avea o instanță de struct Hand. Aruncați o privire la acest –  > Por yano.
1 răspunsuri
Răzvan Cojocaru

Nu este o eroare, ci un avertisment. Îți spune că nu ai voie să inițializezi membrii non-statici ai unei struct / clasă decât începând cu standardul C++11 (numit așa pentru că a fost publicat în 2011). Înainte de aceasta, nu era permisă în mod oficial de C++98 (publicat, ați ghicit, în 1998). Pe scurt, ceea ce faci tu a devenit legal, oficial C++ abia în 2011. Standardul implicit al compilatorului dvs. pare să fie cel din 1998.

Încercați să compilați cu -std=c++11 ca indicator de linie de comandă (presupunând că folosiți GCC sau clang), iar avertismentul ar trebui să dispară. Dacă folosiți un alt compilator, ar trebui să existe un indicator și pentru acesta (dacă este suficient de recent pentru a implementa C++11).