2011-01-09 25 views
6

Aşağıdaki sınıf var:Bu varsayılan şablon parametresine neden izin verilmiyor?

template <typename Type = void> 
class AlignedMemory { 
public: 
    AlignedMemory(size_t alignment, size_t size) 
     : memptr_(0) { 
     int iret(posix_memalign((void **)&memptr_, alignment, size)); 
     if (iret) throw system_error("posix_memalign"); 
    } 
    virtual ~AlignedMemory() { 
     free(memptr_); 
    } 
    operator Type *() const { return memptr_; } 
    Type *operator->() const { return memptr_; } 
    //operator Type &() { return *memptr_; } 
    //Type &operator[](size_t index) const; 
private: 
    Type *memptr_; 
}; 

Ve böyle bir otomatik değişken örneğini girişiminde:

src/cpfs/entry.cpp:438: error: missing template arguments before ‘blah’

yanlış yapıyorum:

AlignedMemory blah(512, 512); 

Bu, aşağıdaki hatayı veriyor ? void izin verilen bir varsayılan parametre değil mi?

When default template-arguments are used, a template-argument list can be empty. In that case the empty <> brackets shall still be used as the template-argument-list.

+0

Herhangi bir yerde 'buf' tanımlayıcısını içeren herhangi bir kodunuz var mı? –

+1

@Charles: 'buf' bir yazım hatasıdır. Şuna bakın: http://www.ideone.com/32gVl ... akıldan önce bir şey eksik. : P – Nawaz

cevap

11

Sana yazmak gerektiğini düşünüyorum Bu:

AlignedMemory<> blah(512, 512); //this uses "void" as default type! 

Hata iletisinin kendisi bu ipucunu verir. Tekrar bakın:

src/cpfs/entry.cpp:438: error: missing template arguments before ‘buf’

Not: Eminim 'buf' bir yazım hatasıdır. 'Blah' yazmak istediniz - değişkeninizin adı!

5

Kişisel sözdizimi yanlıştır:

AlignedMemory blah(512, 512); //wrong syntax 

Doğru sözdizimi

AlignedMemory<> blah(512, 512); 

14,3 [temp.arg]/4 Bkz:

İlgili konular