C++求教
//头文件dList.h
#include<iostream>
using namespace std;
template<class K,class E>
class dList
{
private:
E *element;
int listSize;
void swap1 (int m1, int m2);
int minKey (int low, int high);
public:
dList(int size=10):listSize(size),element(new E[size]){}
~dList(){delete[]element;}
void sort1();
//template<class K,class E>
friend ostream&operator<< (ostream&outStream,dList<K,E>&outList);
//template<class K,class E>
friend istream&operator>> (istream&inStream,dList<K,E>&inList);
};
//dList.cpp
#include<stdlib.h>
#include<iostream>
#include"dList.h"
using namespace std;
template<class K,class E>
void dList<K,E>::swap1(int m1,int m2)
{
E temp=element[m1];
element[m1]=element[m2];
element[m2]=temp;
}
template<class K,class E>
int dList<K,E>:: minKey(int low,int high)
{
int min=low;
for(int i=low+1;i<=high;i++)
if(element[i]<element[min])
min=i;
return min;
}
template<class K,class E>
ostream&operator<<(ostream&outStream,dList<K,E>outList)
{
outStream<<"数组\n";
for(int i=0;i<outList.ListSize;i++)
outstream<<outList.element[i];
outStream<<endl;
outStream<<"输出数组大小"<<
outList.ListSize<<endl;
return outStream;
}
template<class K,class E>
istream&operator>>(istream&inStream,dList<K,E>inList)
{
cout<<"数组\n";
inStream>>inList.ListSize;
cout<<"输入元素值";
for(int i=0;i<inList.ListSize;i++)
{
cout<<"元素"<<i<<":";
inStream>>inList.element[i];
}
return inStream;
}
template<class K,class E>
void dList<K,E>::sort1()
{
for(int i=0;i<listSize-2;i++)
{
int j=minKey(i,listSize-1);
if(j!=i)
swap(j,i);
}
}
//test_list.cpp
#include"dList.cpp"
#include<iostream>
using namespace std;
struct sick{
int key;
char *name[15];
int age;
char *address[30];
bool operator<(sick x){return key<x.key;}
};
int main()
{
const int SZ=10;
int low=1;
int high=2;
dList<int,sick>TestList(SZ);
cout << TestList << endl;
TestList.sort1();
cout << TestList << endl;
return 0;
}
1>------ 已启动生成: 项目: moban, 配置: Debug Win32 ------
1>生成启动时间为 2012/2/27 19:16:31。
1>InitializeBuildStatus:
1> 正在对“Debug\moban.unsuccessfulbuild”执行 Touch 任务。
1>ClCompile:
1> 所有输出均为最新。
1>ManifestResourceCompile:
1> 所有输出均为最新。
1>test_List2.obj : error LNK2019: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class dList<int,struct sick> &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$dList@HUsick@@@@@Z),该符号在函数 _main 中被引用
1>E:\数据结构(c++)\moban\Debug\moban.exe : fatal error LNK1120: 1 个无法解析的外部命令
1>
1>生成失败。
1>
1>已用时间 00:00:03.28
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
[解决办法]
模板类、函数的定义应该和声明在一处写在头文件里。