SORU
11 HAZİRAN 2010, Cuma


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
11 HAZİRAN 2010, Cuma


. 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.

http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/cplr038.htm

. 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BgirlNilaya

    BgirlNilaya

    29 EKİM 2008
  • BiGSH0TROB

    BiGSH0TROB

    7 NİSAN 2011
  • Bryan Adams

    Bryan Adams

    30 Mart 2006