一个c++模板问题,请大家帮忙看看

naturalpower1983 2007-04-22 07:14:32
#include<iostream>
using namespace std;
template<class elemType>
class Examples{
public:
explicit Examples(elemType val=0)
:_val(val){}
bool min(elemType value){return _val<value;}
void value(elemType new_val){_val=new_val;}
void print(ostream &os){os<<_val;}
private:
elemType _val;
};
template<class elemType>
ostream& operator<<(ostream &os,const Examples<elemType>&ex)
{
ex.print(os);
return os;
}
int main()
{
Examples<Examples<int>*> ex1;
Examples<int> sa(1024),sb;
sa=sb;
Examples<string> exs("walden");
//cout<<"exs:"<<exs<<endl;
return 0;
}
这样可以运行通过 但把注释的那句加上就报错
请高手指点
...全文
331 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
naturalpower1983 2007-04-22
  • 打赏
  • 举报
回复
非常感谢 本人太疏忽 不好意思
deng2000 2007-04-22
  • 打赏
  • 举报
回复
再加一个包含文件就行了:
#include<string>
naturalpower1983 2007-04-22
  • 打赏
  • 举报
回复
E:\c++练习\moban.cpp(17) : error C2662: 'print' : cannot convert 'this' pointer from 'const class Examples<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >' to 'class Examples<class std::basic_string<char,str
uct std::char_traits<char>,class std::allocator<char> > > &'
Conversion loses qualifiers
E:\c++练习\moban.cpp(26) : see reference to function template instantiation 'class std::basic_ostream<char,struct std::char_traits<char> > &__cdecl operator <<(class std::basic_ostream<char,struct std::char_traits<char> > &,const class Examp
les<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > &)' being compiled
Error executing cl.exe.
这是报错信息
把const去掉也不行
报错如下:
E:\c++练习\moban.cpp(10) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is no acceptable conversion)
E:\c++练习\moban.cpp(10) : while compiling class-template member function 'void __thiscall Examples<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::print(class std::basic_ostream<char,struct std::ch
ar_traits<char> > &)'
Error executing cl.exe.
HewpKanXue 2007-04-22
  • 打赏
  • 举报
回复
至少windows平台下,就有max/min的宏定义和你函数名冲突的。
你最好保佑你的程序没有包含有这些的文件。
lzp729 2007-04-22
  • 打赏
  • 举报
回复
to:HewpKanXue
类域是一个新的namespace 不会冲突
lzp729 2007-04-22
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
template<class elemType>
class Examples{
public:
explicit Examples(elemType val=0)
:_val(val){}
bool min(elemType value){return _val<value;}
void value(elemType new_val){_val=new_val;}
void print(ostream &os)const {os<<_val;}//或者加个const
private:
elemType _val;
};
template<class elemType>
ostream& operator<<(ostream &os,const Examples<elemType>&ex)
{
ex.print(os);
return os;
}
int main()
{
Examples<Examples<int>*> ex1;
Examples<int> sa(1024),sb;
sa=sb;
Examples<string> exs("walden");
cout<<"exs:"<<exs<<endl;
return 0;
}
lzp729 2007-04-22
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
template<class elemType>
class Examples{
public:
explicit Examples(elemType val=0)
:_val(val){}
bool min(elemType value){return _val<value;}
void value(elemType new_val){_val=new_val;}
void print(ostream &os){os<<_val;}
private:
elemType _val;
};
template<class elemType>
ostream& operator<<(ostream &os,Examples<elemType>&ex) // 去掉const
{
ex.print(os);
return os;
}
int main()
{
Examples<Examples<int>*> ex1;
Examples<int> sa(1024),sb;
sa=sb;
Examples<string> exs("walden");
cout<<"exs:"<<exs<<endl;
return 0;
}
HewpKanXue 2007-04-22
  • 打赏
  • 举报
回复
改:
void print(ostream &os){os<<_val;}
--〉
void print(ostream &os) const {os<<_val;}

另外:min 这个函数名最好换一个,很多库里都已经有同名的了。
或者改成:
bool (min)(elemType value){return _val<value;}
用是可以,看着不顺眼。
chenyu2202863 2007-04-22
  • 打赏
  • 举报
回复
你把报错的提示给出来吧

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧