Warnung: non-static data member-Initialisierungen nur mit -std=c++11 oder -std=gnu++11?
Habe ich diesen code
class Move
{
public:
Move()
{
name = "";
type_num = 18;
power = 0;
accuracy = 0;
type = "???";
}
Move(string a, int b, int c, int d)
{
name = a;
type_num = b;
power = c;
accuracy = d;
/*lines of code to give type a string variable depending on the value of type_num*/
}
private:
string name, type;
int type_num, power, accuracy;
};
class Moveset
{
public:
Moveset()
{
}
private:
Move slot1{"MOVE 1", rand() % 18, 10*(rand() % 15 + 1), 5 * (rand() % 11 + 10)};
};
Und der compiler hat mir diese Warnung für das Objekt deklarieren slot1 unter den private-Abschnitt der Klasse Moveset.
464 83 C:\Users\N\Desktop\C++\Poke\Poke.cpp [Warning] non-static data member initializers only available with -std=c++11 or -std=gnu++11
464 15 C:\Users\N\Desktop\C++\Poke\Poke.cpp [Warning] extended initializer lists only available with -std=c++11 or -std=gnu++11
464 83 C:\Users\N\Desktop\C++\Poke\Poke.cpp [Warning] extended initializer lists only available with -std=c++11 or -std=gnu++11
Obwohl es gab mir die Warnung, aber anscheinend ist es nicht Einfluss auf das Programm ausgeführt wird. Tut es eigentlich auf irgendetwas? und was mache ich hier falsch?
Edit: Und was ist die diifference zwischen einer statischen member-Initialisierung und nicht-statische member-Initialisierung?
C++ - 11-Aggregat Initialisierung von Klassen mit nicht-statische member-Initialisierungen und die neue C++11-member-Initialisierung-Funktion zur Erklärung der Initialisierung Listen veraltet? kann hilfreich sein.
InformationsquelleAutor nayfaan | 2015-10-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den compiler wahrscheinlich als eine Erweiterung, es ist wirklich nicht erlaubt in der älteren C++ - standards.
Entweder initialisieren des Objektes durch eine Konstruktor-Initialisierungsliste, oder Sie aktivieren die C++11 mit den Flaggen der compiler sagt Sie.
Beispiel mit einem Konstruktor initialisiert die Liste:
Sie zu sein scheinen mit einem IDE von einer Art, so dass ich nicht weiß, wie Sie die flags, aber in der Regel irgendwo in den Projekt-Einstellungen gibt es eine Registerkarte für den compiler und dessen Einstellungen, wo Sie sollten in der Lage sein, um hinzuzufügen flags (wenn es nicht eine checkbox für C++11 schon), fügen Sie einfach
-std=c++11
es.Aktualisiert meine Antwort
Ich bin mit Dev-C++
was ist, wenn möchte ich weitergeben in der Variablen, wenn ich es erklären?
InformationsquelleAutor Some programmer dude
Fragte Sie:
Nicht viel anders aus.
Die intializer zum initialisieren einer
static
Mitglied ist eine statische member-Initialisierung.Die intializer zum initialisieren einer nicht-
static
Mitglied ist eine nicht-statische member-Initialisierung.static
Mitglieder sind nicht gebunden an eine bestimmte Instanz der Klasse. Siehe en.cppreference.com/w/cpp/language/static für weitere details.y würde jemand wollen, das zu tun?
Auch dort gibt es viele Anwendungsfälle für
static
Daten der Mitglieder. Ein einfaches Beispiel: Wenn Sie wollen, um einen string für den Namen der Klasse, die in den log-Dateien oder Benutzer-Nachrichten Sie können festlegen, einestatic
Mitglied. Wenn Sie eine KlasseFoo
haben, werden Sie wahrscheinlich verwenden Sie die Zeichenfolge"Foo"
für den Namen der Klasse. Dieser name soll gleich bleiben, die für alle Instanzen der Klasse.InformationsquelleAutor R Sahu