[英]Undefined reference error in overriding virtual functions in c++
我實際上是C ++的新手。 我主要使用Java。 我嘗試構建自己的迭代器,經過一番閱讀后,想到了這種方法。
template<class T> class Iterable
{
T start,stop;
public:
explicit Iterable(T s,T e) {start=s; stop=e;}
public:
virtual void next(T& i);
public:
class iterator: public std::iterator<
std::input_iterator_tag, // iterator_category
T, // value_type
long, // difference_type
const T*, // pointer
T // reference
>{
T current;
Iterable<T>& obj;
public:
explicit iterator(T t,Iterable<T>& o) : obj(o) {current=t;}
iterator& operator++() {obj.next(current); return *this;}
iterator operator++(int) {iterator retval = *this; ++(*this); return retval;}
bool operator==(iterator other) const {return current == other.current;}
bool operator!=(iterator other) const {return !(*this == other);}
T operator*() const {return current;}
};
iterator begin() {return iterator(start,*this);}
iterator end() {return iterator(stop,*this);}
};
class Range : public Iterable<long>
{
long START,STOP;
public:
void next(long& cur) override
{
if(START>=STOP)
cur++;
else
cur--;
}
public:
Range(long st,long en) : Iterable(st,en) {START=st; STOP=en;}
};
這是我的“ flex.h”頭文件。 標頭編譯正常。 但是,當我嘗試使用此Range類時,出現錯誤:
undefined reference to `flex::Iterable<long>::next(long&)'
collect2: error: ld returned 1 exit status
在我的編譯器中(我使用g ++),我的Test1.cpp文件如下:
(After includes)
int main()
{
Range range=Range(15,10);
for(auto r : range)
cout << r << "\n";
}
有人可以解釋我哪里出了問題,如何解決? 謝謝。
您可以在next
聲明一個虛函數,而不定義它。
必須定義虛擬成員函數,或者是純虛函數,或者兩者都定義。 所以如果你聲明
virtual void next(T& i);
它必須內聯或在類定義之外定義,因為它不是純虛擬的。 如果打算將Iterable
用作抽象類的模板,則將純虛擬說明符添加到next
中將解決該錯誤。
virtual void next(T& i) = 0;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.