| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1696 人关注过本帖
标题:请教:如何让类模板template的成员函数返回一个类?
只看楼主 加入收藏
FollowDream
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2017-1-12
结帖率:33.33%
收藏
已结贴  问题点数:1 回复次数:2 
请教:如何让类模板template的成员函数返回一个类?
我先请教一个简单的类的成员函数返回一个类的片段:
  
程序代码:
class T 
{ 
private: 
     vector<int> times; 
public: 
     T* sample(int n) 
     { 
         T* S = new T; 
         for (int i=0; i<n; i++)  S->times.push_back(i*2); 
         return S; 
     } 
     void display(int n) 
     { 
         for (int i=0; i<n; i++)  cout << " " << times[i]; 
     } 
}; 

  
这段程序非常简单,无非是在类T里新建一个类S然后让成员函数sample返回S。但是在main()里运行却发现,无法调用S的成员函数display?!
  
int main() 
     {T t; 
     T* s = t.sample(10); 
     s.display(9);}
// 此处报错为“Segmentation fault”,请问是s的display()有什么问题吗?
  
  
然后假设上一个问题已经解决,同样是在类T里新建一个类S然后让成员函数sample返回S,但是这次需要在模板template里做。
  
程序代码:
template <typename T> class TTT 
{ 
private: 
     vector<T> times; 
public: 
     TTT<T> * sample(uint64_t a, uint64_t b=0); 
     { 
         ... 
         TTT *S = new TTT; // 这样写有问题。那么应该怎么写呢? 
         return S; 
     } 
     display(); 
}; 

  
那么在TTT<T>里面应该怎样新建S、并且返回S呢?后续的S.display()是不是依旧有问题呢?
  
谢谢啦先!
搜索更多相关主题的帖子: 成员 函数 返回 int display 
2017-08-09 08:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:1 
但是在main()里运行却发现,无法调用S的成员函数display?!
什么编译器,你这段代码语法错误呀,竟然能编译通过?s.display(9) 应该改为 s->display(9)。

TTT<T> * sample(uint64_t a, uint64_t b=0);
{
    TTT *S = new TTT; // 这样写有问题。那么应该怎么写呢?
    return S;
}
将 TTT<T> * sample(uint64_t a, uint64_t b=0); 后面的分号去掉



2017-08-09 08:29
FollowDream
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2017-1-12
收藏
得分:0 
回复 2楼 rjsp
问题已经解决。TTT* S = new TTT; 然后用正确的operator即->即可。谢谢你了!
2017-08-10 13:49
快速回复:请教:如何让类模板template的成员函数返回一个类?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026871 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved