我有以下類別: //在concreteIterator.h關於模板的傳承
template<class Item>
class concreteForwardItr : public iterator<Item>
{
public:
concreteForwardItr(){}
concreteForwardItr(List<Item> *theList){
// this->iterator();
targetList = theList;
currentPos = 0;
}
void first(){
currentPos = 0;
}
Item CurrentItem() const {
// return targetList->
if(!IsDone())
{
return targetList->get(currentPos);
}
private:
List<Item>* targetList;
//keep track of current position
long currentPos;
}
//iterator.h
template <class Item>
class iterator{
public:
virtual void first() =0;
virtual Item CurrentItem() = 0;
}
但編譯器抱怨:未定義的引用「迭代器:迭代()」
但我不甚至可以調用該函數。我知道編譯器會爲列表類生成一個默認值。有沒有人看到問題是什麼?
'iterator'的默認構造函數由'concreteForwardItr'的構造函數隱式調用。想知道,是否在程序外部的庫中定義了'iterator'?這似乎錯誤是由鏈接器提出的。 –
@faranwath不,迭代器只是我在同一個項目中編寫的另一個文件。從有效的C++中,我知道如果從模板基類繼承,大多數編譯器不會查看基類。我嘗試使用書中建議的方法,但仍然沒有發生運氣。 – user2984297
您是否嘗試明確調用'iterator'的構造函數? –