请教:关于函数模板参数是自定义类的问题

liwenyang1118 2010-12-23 11:31:04
代码如下:
class CDog
{
private:
CString m_Name;
public:
CDog(CString Name)
{
m_Name = Name;
};
CDog()
{
CDog("Dog");
};
~CDog(){};

CString GetName()
{
return m_Name;
};

};

class CCat
{
private:
CString m_Name;
public:
CCat(CString Name)
{
m_Name = Name;
};
CCat()
{
CCat("CCat");
};
~CCat(){};

CString GetName()
{
return m_Name;
};

};

template<class T>

CString DataOut(T const& Src)
{
return Src.GetName();
}

//使用模板过程
...
CCat* obj = new CCat("Black Cat");

cout << "Getname:" << (LPCTSTR)DataOut(obj) << endl;

delete obj;
...

编译时提示:“'.GetName' must have class/struct/union type”。

象这样的问题用模板该怎么解决呢。
...全文
180 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liwenyang1118 2010-12-23
  • 打赏
  • 举报
回复
不好意思,自己粗心。不管引用和指针都可以的。

另外 DataOut<CCat>(*obj); 这个不错。

还有疑问是:
template<class T>
CString DataOut(T *Src)
{
return Src->GetName();
}

可行,而:
template<class T>

CString DataOut(T const *Src)
{
return Src->GetName();
}

则不行。先放一放了。

谢谢各位!
liwenyang1118 2010-12-23
  • 打赏
  • 举报
回复
不好意思,上面应该是:
CString DataOut(T const *Src)
{
return Src.GetName();
}
//=========================================
这样好象可以的:
template<class T>

CString DataOut(T &Src)
{
return Src.GetName();
}

//使用模板过程
...
CCat obj("Black Cat");// = new CCat("Black Cat");

cout << "Getname:" << (LPCTSTR)DataOut(obj) << endl;

//delete obj;
...


bdmh 2010-12-23
  • 打赏
  • 举报
回复

template<class T>

CString DataOut(T& Src)
{
return Src.GetName();
}


DataOut<CCat>(*obj);
liwenyang1118 2010-12-23
  • 打赏
  • 举报
回复
啊猫啊狗都有Getname的方法,我可以用模板函数返回 Getname 的 值吗。

如果模板函数中 的 类型参数 是自定义类的话,模板函数该怎么编写和怎么使用?教科书中看了很多都是类型参数不是整数就是浮点型的。

我在学习的时候应该保留 现在的疑问继续往下吗,如果继续往下,要学习到哪部分内容能解决上述疑问呢。

谢谢指教啊!
pengzhixi 2010-12-23
  • 打赏
  • 举报
回复
LPCTSTR)DataOut(*obj)
無_1024 2010-12-23
  • 打赏
  • 举报
回复
Src是一个T类型的变量 不是一个结构体啊 你怎么能这么用啊

64,654

社区成员

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

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