Das Problem:
Es hat nichts mit dynamischer Zuordnung zu tun.
Sie sind wahrscheinlich eine dieser Methoden für die Daten Memberinitialisierungsliste verwendet, die Teil von C++ 11:
class S
{
int n; // non-static data member
int& r; // non-static data member of reference type
int a[10] = {1, 2}; // non-static data member with initializer (C++11)
std::string s, *ps; // two non-static data members
struct NestedS {
std::string s;
} d5, *d6; // two non-static data members of nested type
char bit : 2; // two-bit bitfield
};
Source
Der Compiler sagt Ihnen, dass Sie eine Funktion verwenden (Nicht- static data member initialisers), die nur in C++ 11 (und höher) existieren.
Die Lösung des Problems:
- Sie können einfach Ihren Code mit
-std=c++11
Flag kompilieren.
- Alternativ können Sie diese Funktion vermeiden, wenn Sie aus irgendeinem Grund mit einem älteren Standard (z. B. C++ 98) arbeiten möchten (z. B. wenn Sie auf ein System abzielen, auf dem kein C++ 11-Compiler verfügbar ist).
Sollte mich das interessieren?
Absolut, ja. Das Nichtbeachten von Warnungen kann zu vielen Problemen wie Überläufen und undefiniertem Verhalten führen.
Abgesehen von der Warnung, müssen Sie Code, der dies verursacht, zu buchen. –
Welcher Teil von "-std = C++ 11" ist unklar? –
Ja, Sie sollten sich um die Warnung kümmern. Und bevor Sie Ihrem Kompilierungsbefehl blind ein Flag hinzufügen, um die Warnung verschwinden zu lassen, sollten Sie die Art des Problems verstehen, vor dem der Compiler warnt. –