帮忙看下这个运算符重载*为什么报错?(VC6.0)

showming 2010-09-20 02:43:05
#include<iostream>

using namespace std;

template<class T> class Handle
{
T *ptr;
int *use;
public:
Handle(const T t):ptr(new T(t)),use(new int(0)){}
Handle(const Handle &);
Handle& operator=(const Handle& );
T& operator*(const Handle *) ;
T* operator&(const Handle &) ;
~Handle();

};

template<class T> Handle<T>::Handle(const Handle &rhs)
{
ptr=rhs.ptr;
*use++;

}

template<class T> Handle<T>& Handle<T>::operator=(const Handle &rhs)
{
*rhs.use++;
if(!*use)
{
delete ptr;
}
ptr=rhs.ptr;
*use--;
use=rhs.use;
return *this;
}

template<class T> T& Handle<T>::operator*()
{
if(ptr)
return *ptr;
}

template<class T> T* Handle<T>::operator&()
{
if(ptr)
return *ptr;
}

template<class T> Handle<T>::~Handle()
{
if(--*use)
{delete ptr;delete use;}

}








void main()
{

Handle<string> h(string("abcdef"));

cout<<*h.c_str()<<endl;

}

报错信息:
--------------------Configuration: handle - Win32 Debug--------------------
Compiling...
handle.cpp
C:\code\handle\handle.cpp(43) : error C2244: 'Handle<T>::*' : unable to resolve function overload
C:\code\handle\handle.cpp(45) : error C2954: template definitions cannot nest
C:\code\handle\handle.cpp(49) : error C2244: 'Handle<T>::&' : unable to resolve function overload
C:\code\handle\handle.cpp(51) : error C2954: template definitions cannot nest
C:\code\handle\handle.cpp(70) : error C2039: 'c_str' : is not a member of 'Handle<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >'
Error executing cl.exe.

handle.obj - 5 error(s), 0 warning(s)
...全文
85 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2010-09-20
  • 打赏
  • 举报
回复
template<class T> class Handle
{
T *ptr;
int *use;
public:
Handle(const T t):ptr(new T(t)),use(new int(0)){}
Handle(const Handle &);
Handle& operator=(const Handle& );
T& operator*() ;
T* operator&() ;
~Handle();

};

template<class T> Handle<T>::Handle(const Handle &rhs)
{
ptr=rhs.ptr;
*use++;

}

template<class T> Handle<T>& Handle<T>::operator=(const Handle &rhs)
{
*rhs.use++;
if(!*use)
{
delete ptr;
}
ptr=rhs.ptr;
*use--;
use=rhs.use;
return *this;
}

template<class T> T& Handle<T>::operator*()
{
if(ptr)
return *ptr;
}

template<class T> T* Handle<T>::operator&()
{
if(ptr)
return ptr;
}

template<class T> Handle<T>::~Handle()
{
if(--*use)
{delete ptr;delete use;}

}

int main()
{

Handle<string> h(string("abcdef"));

cout<<(*h).c_str()<<endl;
system("pause");
return 0;
}
Csuxiaowu 2010-09-20
  • 打赏
  • 举报
回复
声明都不一样 -----------

64,639

社区成员

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

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