Poniższy kod wygląda dobrze do mnie:C2070 - nielegalne sizeof operand
#include <stdio.h>
template <typename T>
struct A
{
static float m_kA[];
};
template <typename T>
float A<T>::m_kA[] = {1.0f, 2.0f, 3.0f};
int main()
{
printf("%d\n",
sizeof(A<unsigned int>::m_kA)/
sizeof(A<unsigned int>::m_kA[0]));
return 0;
}
Ale kiedy mogę skompilować z VC9 otrzymuję następujący błąd
error C2070: 'float []': illegal sizeof operand
Spodziewam się ten kod do kompilacji. Czy coś mi brakuje? Czy ktoś wie sposób naprawić to dziwne zachowanie (należy pamiętać, że dokładnie to samo bez szablonu kompiluje dobrze i wyjścia 3).
Zauważ, że usunięcie szablonu nie jest opcją, zrobiłem ten przykład, aby odtworzyć problem, który mam w kodzie, gdzie potrzebuję typu zawierającego tablicę jako szablon.
Dzięki
FWIW, Kompiluje dobrze na GCC 4.7.1: http://liveworkspace.org/code/19f48dbdb07463b08a310c168ab59a67. Zobacz, czy to kolejny błąd MSVC czy coś takiego. – chris
Nie sądzę, że wyrażenie oblicza to, co według Ciebie oblicza. – Nobody
@ Nikt 'tablica sizeof/tablica sizeof [0]' jest pospolitym idiomem, który oblicza długość tablicy.Jak myślisz, co on oblicza lub jak sądzisz, co myślą inni ludzie? – hvd