2012-07-09 41 views
7

Im Bu cevap, bu yüzden daha fazla bilgi gerektiğinde bana söylemek gerekli bilgi miktarını tam olarak emin. error: type 'integer' is not a direct base of 'integer': i aniden bu mesajı karşılaştı zaman yazdığı büyük kodunu değiştirmeC++ sınıfı kendisinin taban değil

Im. onun bir miras sorunu olduğunu biliyorum ama diğer sınıfları miras almam. Bu soruna neden olan

kod

integer(const std::string & val, uint16_t base): integer(val.begin(), val.end(), base) {} 

ve

integer(iterator start, iterator end, uint16_t base) 

tanımlanmıştır olmasıdır. Bunu düzeltmek için

Ne yapmam gerekiyor?

DÜZENLEME: ile derleme im -std = C++ 0x, cevaplarına göre, benim derleyici eski olmadıkça, derlemek mümkün olmalıdır ki: bence gcc 4.6.2

+2

Güncelleme yanıtı, gcc 4.7'den itibaren kullanılabilir. – hmjd

cevap

19

uygulanmıştır. İçeri C++ 03 bunu ancak size can do exactly that in C++11 edemez:

class SomeType { 
    int number; 

public: 
    SomeType(int new_number) : number(new_number) {} 
    SomeType() : SomeType(42) {} 
}; 

Sen 4.6 bile, henüz bu özelliği desteklemiyor, g ++ bunun için 4.7 ya da daha yeni çalışmanız gerekir -std = C++ 0x ile sistemimde her iki sürümde de test ettim.

+0

im ile derleme -std = C++ 0x – calccrypto

+3

@calccrypto GCC 4.6 bunu desteklemiyor. 4.7 sanırım. – Flexo

3

Yapamazsın Farklı bir kurucunun başlatıcısı listesinde (C++ 03) aynı sınıftan bir kurucu çağırır. Ama buna göre üyelere başlatabilir: Böyle aynı class diğer kurucular çağırmak için izin verilmez

integer(const std::string & val, uint16_t base): _start(val.begin()) 
               _end(val.end()) 
               _base(base) 
{} 
4

(C++ 11'de delege kurucular vardır). Sınıfın üyelerini başlatmanız gerekir (muhtemelen diğer kurucuda yaptığınız gibi).

DÜZENLEME:

C++0x/C++11 Support in GCC göre, delege kurucular GCC v4.7 doğrudan başka kurucusunu çağırmak için çalışıyoruz gibi görünüyor

İlgili konular