Tanımlama statik sabit sınıf tanımında üye tamsayı
Benim anladığım C statik sabit üyeleri bir sınıf bir tamsayı türü olduğu sürece içinde tanımlanmış sağlar.
Neden, o zaman, aşağıdaki kodu beni bağlayıcı bir hata veriyor mu?
#include <algorithm>
#include <iostream>
class test
{
public:
static const int N = 10;
};
int main()
{
std::cout << test::N << "\n";
std::min(9, test::N);
}
Olsun hata:
test.cpp:(.text 0x130): undefined reference to `test::N'
collect2: ld returned 1 exit status
Ben std çağrısı açıklama ilginçtir,::, Kodu ve gayet iyi derler bağlantıları dk test bile olsa (:: N da bir önceki satıra başvurulan).
Neler olduğu konusunda herhangi bir fikrin var mı?
Benim derleyici Linux üzerinde gcc 4.4.
CEVAP
. ben^>Benim anladığım C statik sabit üyeleri bir sınıf bir tamsayı türü olduğu sürece içinde tanımlanmış sağlar.
Bir bakıma doğru. Sınıf bildirimi içinde statik sabit integral başlatmak için izin verilir ama bu bir tanım değil.
. ben^>Ben std çağrısı açıklama ilginçtir,::, Kodu ve gayet iyi derler bağlantıları dk test bile olsa (:: N da bir önceki satıra başvurulan).
Neler olduğu konusunda herhangi bir fikrin var mı?
::std min sabit referans parametreleri alır. Eğer değeriyle aldıysa bu sorun olmazdı ama referansa ihtiyacın olacak beri ayrıca bir tanım gerekiyor.
İşte bölüm/ayet:
9.4.2/4static
veri üyesi const
integral const
numaralandırma türü, sınıf tanımı bildiriminde belirtebilirsiniz . ben^>sabit başlatıcıintegral sabiti ifadesi (5.19) olarak kalacak. Bu durumda, üye integral sabiti ifadeler görünebilir. Üye hala program içinde kullanılan bir ad alanı kapsamı belirlenmeli, ad kapsam tanımlama içermemelidir . ben^>başlatıcı.
Olası bir çözüm için Chu cevabı bakın.
C statik sabit dize (sınıf üyesi)...
::push_back vector) kullanır değeri, s...
&; statik sabit" vs " quot;#d...
İşaretleme Bir Sınıf VB.NET Statik...
Java iç sınıf ve statik iç içe sınıf...