+ -
当前位置:首页 → 问答吧 → 关于 C++ 模板 编译问题

关于 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 红线 提醒 友元函数(输出 输入函数)不能访问私有变量 但是 却能编译通过 而且能运行 这个是我为什么啊 各位???

作者: lantuling   发布时间: 2011-12-06

你不要理会那个红线就行了,它不是编译器,它只会做简单的语法分析,它的分析是不准确的。

作者: healer_kx   发布时间: 2011-12-06

1.编译单元是.cpp不是.h

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

热门下载

更多