我正在嘗試使用我的項目進行受控學習實驗,它涉及到創建我自己的集合和迭代器,本質上是一個數組和鏈接列表。有些東西因爲編譯鏈接錯誤而丟失。我花了三天時間檢查,編碼和重新編碼,我真的需要一些幫助。使用模板時的鏈接器錯誤
我使用Visual Studio 2010中,我在涉足新的C++ 11的東西與新基於不等的,或每個因爲我想起來了。在Visual C++中,它是for each (VAR in LIST)
,但在GCC中是for (VAR : LIST)
。
這裏是鏈接錯誤:
main.obj : error LNK2001: unresolved external symbol "public: virtual class Iterator<int> __thiscall Container<int>::begin(void)const " ([email protected][email protected]@@[email protected]@@XZ)
main.obj : error LNK2001: unresolved external symbol "public: virtual class Iterator<int> __thiscall Container<int>::end(void)const " ([email protected][email protected]@@[email protected]@@XZ)
我的代碼如下:
template<typename T>
class Iterator
{
public:
Iterator(T* Start) : Current(Start) { }
const T& operator*() const { return *Current; }
const T* operator->() const { return Current; }
Iterator<T>& operator++() { Current++; return *this; }
bool operator!=(Iterator<T> &Other) { return Current != Other.Current; }
protected:
T* Current;
};
template<typename T>
class Container
{
public:
Container() : Count(0) { }
Container(unsigned int Count) : Count(Count) { }
unsigned int GetCount() const { return Count; }
bool IsEmpty() const { return Count == 0; }
Iterator<T>& GetIterator() const { return begin() };
// Compatibility with C++0x range-based for requires begin() and end() functions.
virtual Iterator<T> begin() const;
virtual Iterator<T> end() const;
protected:
unsigned int Count;
};
template<typename T>
class ArrayList : public Container<T>
{
public:
ArrayList() : Items(nullptr), Container(0) { }
virtual Iterator<T> begin() const
{
return Iterator<T>(Items);
}
virtual Iterator<T> end() const
{
return Iterator<T>(Items + Count);
}
private:
T *Items;
};
int main()
{
ArrayList<int> MyList;
for each (auto Item in MyList)
{ }
return MyList.GetCount();
}
很難想象這麼簡單的人可以讓我堅持這麼久。謝謝。我的目標是在Container上獲得純虛擬。 – 2011-04-14 13:32:36