2015-07-02 36 views

Odpowiedz

23

a nie jest typem, dlatego nie można do niego zastosować ::. Można użyć decltype pobrać typ a „s

std::array<int, 1> a; 
std::array<decltype(a)::value_type, 1> a2; 
+0

Dobry połów, '+ 1' ode mnie. – sbi

1

Quentin dał wam jeden sposób, aby obejść ten problem. Oto jeszcze dwa.

Oczywistym rozwiązaniem, oczywiście, jest zastąpienie nazwy przedmiotu a z nazwą typu:

std::array<typename std::array<int, 1>::value_type, 1> a2; 

Jednak patrząc na kodzie, zastanawiałem się, czy to, co chciałeś jest zdefiniowanie typy, a nie obiekty. Myślę a i a2 uczynić wyjątkowo złych nazw rodzajowych (więc moje podejrzenie było prawdopodobnie źle), ale tutaj przejść:

typedef std::array<int, 1> a; 
typedef std::array<typename a::value_type, 1> a2; 

Teraz można tworzyć instancje tych typów.

Powiązane problemy