Le problème vient du fait que, d'un choc des nouvelles fonctionnalités C++ et de ce que vous essayez de faire. Tout d'abord, jetons un coup d'oeil à la push_back signature:
void push_back(const T&)
Il attend une référence à un objet de type T. en Vertu de l'ancien système d'initialisation, par exemple un membre existe. Par exemple, le code suivant compile parfaitement:
#include <vector>
class Foo {
public:
static const int MEMBER;
};
const int Foo::MEMBER = 1;
int main(){
std::vector<int> v;
v.push_back( Foo::MEMBER ); // undefined reference to `Foo::MEMBER'
v.push_back( (int) Foo::MEMBER ); // OK
return 0;
}
C'est parce qu'il est un objet réel, quelque part, qui a de la valeur stockée. Si, toutefois, vous passez à la nouvelle méthode de spécification de static const membres, comme vous avez ci-dessus, Foo::MEMBRE n'est plus un objet. C'est une constante, un peu semblable:
#define MEMBER 1
Mais sans les maux de tête d'un pré-processeur de macro (et avec le type de sécurité). Cela signifie que le vecteur, qui attend une référence, ne peut pas en obtenir un.