Sadece şablon tipi bir işaretçi olduğunda aşağıdaki işlevin çağrılmasını istiyorum. Aşağıdaki kod, t türünde bir şablon olan bağlantılı bir listenin (standart olmayan bir şey değil) bir fonksiyonudur. İşlev hiç çağrılmadığında bile şablon tipi bir işaretçi olmadığında bir derleme hatası atılıyor. Bir işlev, yalnızca işaretçi olmayan şablon türünden çağrılırsa ve bir işaretçi olan bir şablon türünden çağrıldığında oluşmaması durumunda bir hata atmak için bir yönteme ihtiyacım var. bir gösterici değildir silemezsiniz nesneler:Tip bir işaretçi değilse, şablon işlevinin çağrılması nasıl engellenir?
virtual void ClearAndDelete()
{
ListNode<t> * ptr = this->FirstNode;
for (; ptr != nullptr;)
{
ListNode<t> * nextptr = ptr->Next;
delete ptr->Item;//ERROR C2541
delete ptr;
ptr = nextptr;
}
this->TotalNodes = 0;
this->FirstNode = nullptr;
this->LastNode = nullptr;
}
Visual Studio 2015 belirli hata kodu Hata C2541 'delete' dir. Bu, bu şablon türü için kodumun hiçbiri bu işlevi çağırmasa bile, 'imzasız kısa' olan bir şablon türünde gerçekleşiyor. Öneriler takdir edilecektir.
olarak, sadece öğrenmek istiyorsanız bu ListNode
template<typename t> struct ListNode
{
public:
t Item;
ListNode<t> * Next;
ListNode(t what) : Item(what)
{
this->Next = nullptr;
}
ListNode(t what, ListNode<t> * nextnode) : Item(what)
{
this->Next = nextnode;
}
};
ListeNode – MikeMB
@MikeMB tanımının tanımlamasını gösterebilirsiniz Orijinali düzenlemek için orijinal gönderiyi düzenledim –
Bunu yapmak zorunda kalıyorsanız, sınıfınız çok fazla şey yapıyor gibi geliyor. "Endişelerin ayrılması" konusuna bakın. – juanchopanza