2012-03-04 20 views
8

C++ 11 böyle bir yapıya sahip:C++ 11 Uygun Yapı Başlatma

struct von 
{ 
    std::string Name; 
    unsigned int ID; 
    std::vector<std::string> Checks; 
}; 

böyle başlatıldı olmalı:

von v = {"",0,{}}; 

Ya da böyle:

von v = {}; 

Her iki yol da çalışıyor gibi görünüyor, ancak derleyici ikinci örnekte -Wmissing alan başlatıcıları hakkında uyarıyor.

Düzenleme: İşte derleyici seçeneklerim: g ++ main.cpp -ansi -Wall -Wextra -WeffC++ -std = C++ 0x. Ben g ++ (Debian 4.6.2-12) 4.6.2

+2

Örneğinizde başlatıcı listesi yok, yalnızca liste başlatılıyor. En iyi yol von v {}; 'olabilir. –

+1

von v {}; Ayrıca üyeler için eksik başlatıcılar şikayet ediyor. -Wmissing alan başlatıcısı uyarısı. – 01100110

+0

Hm, haklısınız. Otomatik bir değişkeni değerleyemediğin bir utanç… 'v v {{}, 0, {}};' 'sonraki en iyi şey. –

cevap

1

kullanıyorum Bu, initializer_list gerektirmez ve C++ 03 ile gayet iyi çalışır. Düzenleme: (Tamam, C++ 11'e gereksinim duyduğunuz vektörün başlatılması için) Bir struct veya array başlatmasında, açıkça belirtilmemiş olan tüm değerler sıfır başlatılır, yani eğer buysa = {}; iyi çalışır.