robię coś takiegoKorzystanie static const + const jako tablica związany
Class.hpp:
class Class {
private:
static const unsigned int arraySize;
int ar[arraySize+2];
};
Class.cpp:
#include <Class.hpp>
const unsigned int arraySize = 384;
kompilatora (q ++, A kompilator C++ dla systemu QNX na podstawie g ++) daje mi error: array bound is not an integer constant
podczas kompilowania jednostki zawierającej Class.hpp
(nie podczas kompilacji Class.cpp).
Dlaczego to nie działa? Wiem, że statyczny element const może być używany jako tablica powiązana, gwarantowana przez standard C++ (patrz this anwser). Ale dlaczego kompilator nie widzi wyniku jako stałej w postaci static const + const
?
Kompiluje się dobrze dla mnie (gcc 4.6.1), tak jak powinien. Prawdopodobnie błąd w tym kompilatorze? –
Zaktualizowałem mój przykład, aby lepiej pasował do mojego prawdziwego kodu. Być może jest problem z deklaracją forward arraySize? – MBober
Patrz tutaj: [DR # 721] (http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#721). Zawsze było to zamierzone (i w C++ 11 jest wyraźnie), że inicjator dla stałej powinien być widoczny w punkcie, w którym element danych statycznych lub stała stała została użyta do zakwalifikowania jako wyrażenie stałe. –