Bir liste sınıf için üye sınıf olarak bir yineleyici sınıfı oluşturmak için çalışıyorum ve indirection operatörü (*) bu işaret ediyor listesine erişmek için aşırı çalışıyorum:İndirme operatörü nasıl yüklenir? (C++)
template<class T>
T list<T>::iterator::operator*(iterator& iter)
{
return ((iter.lstptr)->current)->data;
}
Burada lstptr
bir listenin bir işaretçisidir, current
bir node sınıfının bir işaretçisidir ve düğüm sınıfıtip T
tipini içerir.
Yineleyici böyle ilan edilir:
list<int> lst1;
lst1.add(6);
list<int>::iterator IT;
IT = lst1;
//everything above this point compiles fine
int a = *IT; //error here (line fourteen)
hatası: İyiyim aşırı operatörün işlevi tanımı * derlemek, ama am güçlü
template<class T>
class list
{
public:
class iterator;
};
template<class T>
class list<T>::iterator
{
//stuff
};
ben böyle bir şey yapmak çalıştığınızda Ben < 1> yasadışı bir dolaylı kullanıyorum ve < 2> listeden dönüştüremediğini söylerim: iterator to int. Her iki hata da on dört satırda gerçekleşir.
Neyi yanlış yaptığımı ve dolaylı operatörü doğru şekilde nasıl yükleyebileceğimi bilen var mı?
NB: Daha fazla kod görmeniz gerekiyorsa, bana hangi bölümü söyleyin, çünkü tüm kodu buraya koymak istemiyorum çünkü 205 satır abot ve bu satırların 204'ü (sanırım) yok herhangi bir hata var.
"Liste :: iterator IT;" yazdınız mı? - "Liste :: iterator IT;", değil mi? –
leander
@leander: Evet, gerçek koddaki liste, ben sadece kendi örneğimde yazarak karıştırdım. –