关于 C++ 模板 编译问题
时间:2011-12-06
来源:互联网
#include<iostream>
using namespace std;
const int defaultSize=100;
template <typename E ,typename K>
class dataList;
template <typename E ,typename K>
class dataNode
{
protected:
K key;
friend class dataList<E,K>;
public:
dataNode(K k){key=k};
dataNode(){};
K getKey(){return key;}
void setKey(K k){key=k;}
friend ostream & operator<<(ostream & out,dataNode<E,K>&Node)
{
out<<Node.key<<" ";
return out;
}
friend istream & operator>>(istream & in,dataNode<E,K>&Node)
{
in>>Node.key;
return in;
}
};
template <typename E,typename K>
class dataList
{
protected:
dataNode<E,K> *Element;
int MaxSize;
int CurrentSize;
public :
dataList(int size=defaultSize)
{
MaxSize=size;
Element=new dataNode<E,K>[MaxSize];
CurrentSize=0;
}
~dataList()
{
delete Element;
}
K getKey(int i);
void setKey(K key,int i);
int BinarySearch(K key);
int BinarySearch(K key,int low,int high);
friend ostream& operator<<(ostream & out,dataList<E,K>& list)
{
cout<<"List content is:";
for(int i=0;i<list.CurrentSize;i++)
{
out<<list.Element[i];
}
return out;
}
friend istream& operator>>(istream & in,dataList<E,K>&list)
{
cout<<"How many datas:"<<endl;
in>>list.CurrentSize;
cout<<"Please Enter KEY NODE;"<<endl<<endl;
for(int i=0;i<list.CurrentSize;i++)
{
cout<<"Element "<<i+1<<" =";
in>>(list.Element[i]);
}
return in;
}
};
template <typename E,typename K>
K dataList<E,K>::getKey(int i)
{
return Element[i].key;
}
template <typename E,typename K>
void dataList<E,K>::setKey(K key,int i)
{
Element[i].key;
}
template <typename E,typename K>
int dataList<E,K>::BinarySearch(K key)
{
int high=MaxSize-1;
int low=0;
int middle=(high+low)/2;
while(high>=low)
{
if(key==Element[middle].key)
{
return middle+1;
}
else if(key<Element[middle].key)
{
high=middle-1;
middle=(low+middle)/2;
}
else if(key>Element[middle].key)
{
low=middle+1;
middle=(low+high)/2;
}
}
return -1;
}
template <typename E,typename K>
int dataList<E,K>::BinarySearch(K key,int low,int high)
{
int midddle=0;
if(low<=high)
{
middle=(low+high)/2;
if(Element[middle].key==key)
{
return middle;
}
else if(key<Element[middle].key)
{
middle=BinarySearch(key,low,middle-1);
}
else if(key>Element[middle].key)
{
Bmiddle=inarySearch(key,middle+1,high);
}
}
else
{
return -1;
}
}
int main()
{
dataList<int,int> data;
cin>>data;
cout<<data;
}
我这个在.h文件里 编译不通过
放在 .cpp文件下 VS2010 红线 提醒 友元函数(输出 输入函数)不能访问私有变量 但是 却能编译通过 而且能运行 这个是我为什么啊 各位???
using namespace std;
const int defaultSize=100;
template <typename E ,typename K>
class dataList;
template <typename E ,typename K>
class dataNode
{
protected:
K key;
friend class dataList<E,K>;
public:
dataNode(K k){key=k};
dataNode(){};
K getKey(){return key;}
void setKey(K k){key=k;}
friend ostream & operator<<(ostream & out,dataNode<E,K>&Node)
{
out<<Node.key<<" ";
return out;
}
friend istream & operator>>(istream & in,dataNode<E,K>&Node)
{
in>>Node.key;
return in;
}
};
template <typename E,typename K>
class dataList
{
protected:
dataNode<E,K> *Element;
int MaxSize;
int CurrentSize;
public :
dataList(int size=defaultSize)
{
MaxSize=size;
Element=new dataNode<E,K>[MaxSize];
CurrentSize=0;
}
~dataList()
{
delete Element;
}
K getKey(int i);
void setKey(K key,int i);
int BinarySearch(K key);
int BinarySearch(K key,int low,int high);
friend ostream& operator<<(ostream & out,dataList<E,K>& list)
{
cout<<"List content is:";
for(int i=0;i<list.CurrentSize;i++)
{
out<<list.Element[i];
}
return out;
}
friend istream& operator>>(istream & in,dataList<E,K>&list)
{
cout<<"How many datas:"<<endl;
in>>list.CurrentSize;
cout<<"Please Enter KEY NODE;"<<endl<<endl;
for(int i=0;i<list.CurrentSize;i++)
{
cout<<"Element "<<i+1<<" =";
in>>(list.Element[i]);
}
return in;
}
};
template <typename E,typename K>
K dataList<E,K>::getKey(int i)
{
return Element[i].key;
}
template <typename E,typename K>
void dataList<E,K>::setKey(K key,int i)
{
Element[i].key;
}
template <typename E,typename K>
int dataList<E,K>::BinarySearch(K key)
{
int high=MaxSize-1;
int low=0;
int middle=(high+low)/2;
while(high>=low)
{
if(key==Element[middle].key)
{
return middle+1;
}
else if(key<Element[middle].key)
{
high=middle-1;
middle=(low+middle)/2;
}
else if(key>Element[middle].key)
{
low=middle+1;
middle=(low+high)/2;
}
}
return -1;
}
template <typename E,typename K>
int dataList<E,K>::BinarySearch(K key,int low,int high)
{
int midddle=0;
if(low<=high)
{
middle=(low+high)/2;
if(Element[middle].key==key)
{
return middle;
}
else if(key<Element[middle].key)
{
middle=BinarySearch(key,low,middle-1);
}
else if(key>Element[middle].key)
{
Bmiddle=inarySearch(key,middle+1,high);
}
}
else
{
return -1;
}
}
int main()
{
dataList<int,int> data;
cin>>data;
cout<<data;
}
我这个在.h文件里 编译不通过
放在 .cpp文件下 VS2010 红线 提醒 友元函数(输出 输入函数)不能访问私有变量 但是 却能编译通过 而且能运行 这个是我为什么啊 各位???
作者: lantuling 发布时间: 2011-12-06
你不要理会那个红线就行了,它不是编译器,它只会做简单的语法分析,它的分析是不准确的。
作者: healer_kx 发布时间: 2011-12-06
1.编译单元是.cpp不是.h
2.友元函数是可以访问私有变量的
2.友元函数是可以访问私有变量的
作者: pengzhixi 发布时间: 2011-12-06
C/C++ code
int main() { dataList<int,int> data; cin>>data; cout<<data; } 你这个main也放在.h文件里?如果是,那自然不能通过 你这里放在。cpp里面是没有问题的,友元函数当然可以访问私有成员
作者: qscool1987 发布时间: 2011-12-06
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28