Masalahnya muncul karena bentrokan menarik dari fitur C ++ baru dan apa yang Anda coba lakukan. Pertama, mari kita lihat push_back
tanda tangannya:
void push_back(const T&)
Itu mengharapkan referensi ke objek tipe T
. Di bawah sistem inisialisasi yang lama, anggota semacam itu ada. Sebagai contoh, kode berikut mengkompilasi dengan baik:
#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;
}
Ini karena ada objek aktual di suatu tempat yang memiliki nilai yang tersimpan di dalamnya. Namun, jika Anda beralih ke metode baru menentukan anggota const statis, seperti yang Anda miliki di atas,Foo::MEMBER
tidak lagi menjadi objek. Ini konstan, agak mirip dengan:
#define MEMBER 1
Tetapi tanpa sakit kepala makro preprocessor (dan dengan keamanan jenis). Itu berarti bahwa vektor, yang mengharapkan referensi, tidak bisa mendapatkannya.