永发信息网

c++在模板类中使用list问题

答案:4  悬赏:0  手机版
解决时间 2021-03-10 00:22
  • 提问者网友:温旧梦泪无声
  • 2021-03-09 16:11
我现在看了c++编程艺术,看到写垃圾回收器中,在GCPtr中定义一个静态的list,该list中的成员是GCInfo<T>类型,GCInfo也是一个自定义模板类,代码如下:
template <class T, int size = 0> class GCPtr{
//包含全部指针变量
static list<GCInfo<T> > gclist;
T *addr;
bool isArray;
unsigned arraySize;
static bool first;
。。。。
};
我用的vs2008,现在的问题是,在GCPtr中为什么不能用gclist调用list的方法呢,而如果把gclist定义到一个模板函数中,就可以调用了
template <class T>
void fun(const &T x)
{
list <GCInfo<T> > gclist;
}
我也是按着书上来的,这是什么原因呢
最佳答案
  • 五星知识达人网友:底特律间谍
  • 2021-03-09 17:37
给你一个简化的,能正确编译、链接的修改,楼主对照着看看是不是漏了什么,没有注释:
template<typename T>
class GCInfo{};

template <class T, int size = 0>
struct GCPtr{
static list<GCInfo<T> > gclist;
void Test()
{
gclist.push_back(GCInfo<T>());
}
};
list<GCInfo<int> > GCPtr<int, 1>::gclist;
void TestTheModel()
{
GCPtr<int, 1> t;
t.Test();
}
全部回答
  • 1楼网友:鸽屿
  • 2021-03-09 19:49
可以调用但需要注意几个问题。 1、静态对象必须在类外初始化。 2、因有在类外初始化的需求,静态对象必须是公有的。 下面看个例子: linklist<int> list2; class A { public: static linklist<int> list; void mod() { list.add(10); } void print() { list.print(); } }; linklist<int> A::list=list2; int main() { A a; a.mod(); a.print(); system("pause"); } 以上例子给你描述的大致差不多,你对照看看你的问题在那。
  • 2楼网友:街头电车
  • 2021-03-09 19:29
static list<GCInfo<T> > gclist; 表明gclist是静态成员,所以只有静态成员函数才可以操作gclist 不知道是不是这个原因
  • 3楼网友:酒醒三更
  • 2021-03-09 18:36
给你一个简化的,能正确编译、链接的修改,楼主对照着看看是不是漏了什么,没有注释: template&lt;typename t&gt; class gcinfo{}; template &lt;class t, int size = 0&gt; struct gcptr{ static list&lt;gcinfo&lt;t&gt; &gt; gclist; void test() { gclist.push_back(gcinfo&lt;t&gt;()); } }; list&lt;gcinfo&lt;int&gt; &gt; gcptr&lt;int, 1&gt;::gclist; void testthemodel() { gcptr&lt;int, 1&gt; t; t.test(); }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯