2016-11-25 58 views
2

我使用的是動態分配的首次,而編譯器給了我這個警告,我無法找到其他地方:警告時動態分配內存

warning: non-static data member initializers only available with 
-std=c++11 or -std=gnu++11 

有沒有辦法讓它desappear?我應該在乎嗎? 謝謝!

+5

除了警告,你需要發佈代碼導​​致這一點。 –

+2

「-std = C++ 11」的哪部分不清楚? –

+4

是的,你應該關心警告。在爲編譯命令盲目添加一個標誌以使警告消失之前,您應該瞭解編譯器警告的問題的性質。 –

回答

5

問題:

它無關動態分配

您可能正在使用的這種方法的數據成員初始化它們是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

編譯器告訴你,你正在使用的功能(非靜態數據成員初始值設定項)只存在於C++ 11(及以上版本)中。

解決問題:

  • 你可能僅僅-std=c++11標誌編譯代碼。
  • 或者,如果您因爲某些原因想要使用較舊的標準(例如C++ 98)(如您的目標系統中沒有C++ 11編譯器可用),則可以避免使用此功能。

我應該在意嗎?

當然,是的。不注意警告可能會導致許多問題,如溢出和未定義的行爲。

+0

我對-std = C++ 11標誌一無所知,我會堅決使用它!謝謝! –

3

總是關心警告!警告是有用的,事實上,你應該總是編譯-Werror

,是警告你,你在預先C++編譯11,但在你的代碼使用的是C++ 11級初始化:

struct foo { 
    int i = 0; // initialization of non-static POD 
}; 

你有-std=c++11編譯,或停止使用該功能並在構造函數中初始化數據成員。