2012-03-11 13 views

cevap

8

ki: Belli diziler açısından oldukça yetersiz eskiden

const A a[3] = { A(0,0), A(1,1), A(2,2) }; 

C++ (:

const A a[3] = { {0,0}, {1,1}, {2,2} }; 
eski derleyiciler üzerinde

ve A erişilebilir bir kopya kurucu sahiptir varsaysak, söylemek zorunda Başlatmalar sadece mümkün değildi) ve bu C++ 11'de biraz daha iyi oldu.

+0

gibi olması gerektiğini düşünüyorum her üyesine değerlerini yeniden atamak için bir döngü kullanmak, derleyici sadece ısınma sorunu 32 : uyarı: genişletilmiş başlatıcı listeleri yalnızca -std = C++ 0x veya -std = gnu ++ 0x [varsayılan olarak etkin] ile kullanılabilir. ' "Erişilebilir" ne anlama geliyor? herkese açık, teşekkür ederim. –

+0

@UniMouS: GCC'de '-std = C++ 0x' ile derleyin. Erişilebilir, ona erişebileceğiniz anlamına gelir, yani özel değil ya da '= delete'd. –

+0

Teşekkür ederim, @Kerrek: ve '= delete' nedir? –

1

sürece tipi (sentezlenmiş veya açıkça tanımlanmış olsun) bir kopyası constructior aşağıdaki işleri olduğu gibi:

A array[] = { A(1, 3), A(3, 4), A(5, 6) }; 

Bu çalışma C++ 2003 ve C++ 2011'de kesinlikle yok KerrekSB tarafından gönderildi çözüm ile hem C++ 2003 ile çalışmaz ancak withC++ 2011 çalışabilir (orada çalışıp çalışmadığından emin değilim).

+0

Kopya oluşturucunun erişilebilir olması da gerekiyor. Sadece * sahip olmak yeterli değil. –

0

bir varsayılan kurucu sağlayabilir ve dizininizi normal olarak başlatabilirsiniz. 'Main.cpp:: 10: Başarılı başlatma sonrasında

0

ben İlk durumda bu

const A a[3] = { A(1, 2), A(3, 4), A(5, 6) };

+0

yeni A-örneklerini –

+0

A-örneklerini bir hata sorunu yapacak: main.cpp: 9: 42: hata: 'A *' dan skaler olmayan tip 'A' 'ye dönüşüm istenir –

+0

özür dilerim , cevap düzeltildi – hamed

İlgili konular