2012-03-11 5 views

Odpowiedz

8

Powiedz:

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

Na starszych kompilatorów i zakładając A ma dostępną konstruktor kopiujący, trzeba powiedzieć:

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

C++ używane być całkiem niewystarczające w odniesieniu do tablic (pewną Inicjalizacja po prostu nie była możliwa), a to w C++ 11 było nieco lepsze.

+0

W pierwszym przypadku, kompilator po prostu wydać ocieplenia: „main.cpp: 10: 32 : ostrzeżenie: rozszerzone listy inicjalizacyjne dostępne tylko z opcją -std = C++ 0x lub -std = gnu ++ 0x [domyślnie włączone]. Co oznacza "dostępny"? publiczny? i, dziękuję. –

+0

@UniMouS: W GCC kompiluj z '-std = C++ 0x'. Dostępny oznacza, że ​​możesz uzyskać do niego dostęp, tj. Nie jest prywatny lub '= delete'd. –

+0

dziękuję, @Kerrek: i jakie jest znaczenie '= delete'? –

1

Dopóki typ ma constructior kopiowania (czy zsyntetyzowany lub wyraźnie zdefiniowany) następujących utworów:

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

Ta praca zarówno z C++ 2003 i C++ 2011. Rozwiązanie wysłane przez KerrekSB pewno robi nie działa z C++ 2003, ale może działać z C++ 2011 (nie jestem pewien, czy to działa).

+0

Konstruktor kopiowania musi być również dostępny. Tylko * posiadanie * nie wystarczy. –

0

możesz podać domyślny konstruktor i zainicjować tablicę jak zwykle. Po udanej inicjalizacji użyć pętli przypisanie wartości do każdego członka

0

myślę, że powinno być jak ten

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

+0

nowy sprawi, że wskaźniki do A, a nie instancje –

+0

wystąpi błąd kompilatora: main.cpp: 9: 42: błąd: konwersja z "A *" na nie-skalarny typ "A" zgłoszony –

+0

przepraszam , odpowiedź poprawiła się – hamed

Powiązane problemy