türünden türetilmiş değildir typename deneyin:
template <class T>
class CSafeSet
{
public:
CSafeSet();
~CSafeSet();
typename std::set<T>::iterator Begin();
private:
std::set<T> _Set;
};
Sen TypeName gerek Orada, şablon T'ye bağımlı olduğu için kodun üzerindeki bağlantıda daha fazla bilgi. Yan not
template <class T>
class CSafeSet
{
public:
typedef T value_type;
typedef std::set<value_type> container_type;
typedef typename container_type::iterator iterator_type;
typedef typename container_type::const_iterator const_iterator_type;
CSafeSet();
~CSafeSet();
iterator_type Begin();
private:
container_type _Set;
};
Eğer CSafeSet özel comparer kullanarak anlamına gelen bir set could olarak aynı şeyi yapmak için izin gerekir tamamlamak olmak istiyorsanız,: Eğer typedef en kullanırsanız Çok 'Bu eşyaların daha kolay yapılır ve ayırıcı: bir sınıfın etrafında sarıcı oluşturmak için gidiyoruz eğer
template <class T, class Compare = std::less<T>, class Allocator = std::allocator<T> >
class CSafeSet
{
public:
typedef T value_type;
typedef Compare compare_type;
typedef Allocator allocator_type;
typedef std::set<value_type, compare_type, allocator_type> container_type;
typedef typename container_type::iterator iterator_type;
typedef typename container_type::const_iterator const_iterator_type;
// ...
}
ve bir tavsiye son bit, sınıf nereden geldiğini aynı adlandırma kuralları takip etmeye çalışıyorum. Yani, Begin()
, muhtemelen begin()
olmalıdır (Ve kişisel olarak bir sınıf adı garip ama ben size kalmış biri önce C düşünüyorum:))
Yan not olarak: Bunu tanımlayıcılarda alt çizgi kullanma hakkında okuyun. http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier/228797#228797 –
Kısa versiyon: "Tanımlayıcı adlarını altçizgi ile başlatmayın " – jalf
Uzun versiyon: Derleyici için büyük harfle takip edilen alt harfler ayrılmıştır. Derleyici için her şeyi takip eden çift alt çizgiler de ayrılmıştır. – GManNickG