首先我在VC6中开了新的工程Win32控制台程序,工程是空的。然后我将自己写的代码文件导入:
// MyLnkList.h
#ifndef __MYLNKLIST_H
#define __MYLNKLIST_H
template<class T>
class MyLnkList;
template<class T>
class MyNode {
public:
friend class MyLnkList<T>;
private:
T ItemType;
MyNode<T> *prev, *next;
};
template<class T>
class MyLnkList
{
public:
MyLnkList();
~MyLnkList();
bool push_back(const T& i);
T pop_back(void);
private:
MyNode<T> *head, *tail;
int length;
};
#endif
// MyLnkList.cpp
#include "MyLnkList.h"
template<class T>
MyLnkList<T>::MyLnkList()
: head(NULL), tail(NULL), length(0)
{
}
template<class T>
MyLnkList<T>::~MyLnkList()
{
if(!length)
return;
MyNode<T> *p, *bakup;
p = head;
while(p) {
bakup = p->next;
delete p;
p = bakup;
}
head = tail = NULL;
length = 0;
}
template<class T>
bool MyLnkList<T>::push_back(const T& i) {
MyNode<T> *p = new MyNode<T>;
if(!p)
return false;
p->ItemType = i;
if(!head) {
head = p;
p->next = p->prev = NULL;
tail = head;
}
else {
tail->next = p;
p->prev = tail;
p->next = NULL;
tail = p;
}
length++;
return true;
}
template<class T>
T MyLnkList<T>::pop_back(void) {
T i;
MyNode<T> *p = tail;
if(tail) {
i = tail->ItemType;
tail = tail->prev;
length--;
delete p;
p = NULL;
}
return i;
}
// Main.cpp
#include <iostream>
#include "MyLnkList.h"
using std::cout;
using std::endl;
static int t[] = {1,2,3,4,5,6,7,8,9,10};
int main() {
register int i;
MyLnkList<int> lnklst;
for(i = 0; i < 10; i++)
lnklst.push_back(t[i]);
for(i = 0; i < 10; i++)
cout << (int)lnklst.pop_back() << '\x20';
cout << endl;
return 0;
}
这些代码是没有错误的我可以肯定,但我将MyLnkList.h包含到Main.cpp中编译后,连接器会告诉我很多符号好像不能识别,但我将包含语句中的MyLnkList.h改成MyLnkList.cpp时却能正常使用,请各位高手给小弟点致电谢谢。。
PS:另外我发现,如果我写一个类,但不用模板编成,以上方法对类的调用是可行的,这点就很奇怪了,但始终找不到问题在哪里,看了许多书都是以上面的格式写类文件的,若使用了模板就不行了。