Sorun, yeni C ++ özelliklerinin ilginç bir çatışması ve ne yapmaya çalıştığınız nedeniyle ortaya çıkıyor. İlk olarak, push_back
imzayı inceleyelim:
void push_back(const T&)
Tür nesnesine bir başvuru bekliyor T
. Eski başlatma sistemi altında, böyle bir üye vardır. Örneğin, aşağıdaki kod iyi derlenir:
#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;
}
Bunun nedeni, içinde değeri olan bir yerde gerçek bir nesne olmasıdır. Bununla birlikte, yukarıdaki gibi statik statik üyelerin belirtilmesi için yeni yönteme geçerseniz, Foo::MEMBER
artık bir nesne değildir. Sürekli, biraz benzer:
#define MEMBER 1
Ancak bir önişlemci makrosunun baş ağrısı olmadan (ve tip güvenliği ile). Bu, referans bekleyen vektörün bir tane alamadığı anlamına gelir.