关于模板类的问题--自定义一个模板类不能在另一个类的类成员变量中定义

da_xu 2004-07-22 04:05:10
我编写的一个模板类A
template <class T>
class A {
...
}

当我在cpp文件中,如main函数中定义运行都没问题。
void main() {
A<myclass> b;
}

但我新建一个类并在类成员变量中定义时,编译出错
class B {
private:
A<myclass> b;
}

出错信息如下:
error C2143: syntax error : missing ';' before '<'
error C2501: 'CFineList' : missing storage-class or type specifiers
error C2059: syntax error : '<'
error C2059: syntax error : '<'


请各位帮帮忙,急啊
...全文
340 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
expert2000 2004-07-22
  • 打赏
  • 举报
回复
学习,帮顶,楼主给点分我就能提高。^!^
freefalcon 2004-07-22
  • 打赏
  • 举报
回复
仔细检查你各个类定义后面是否漏掉了分号;

尤其是myclass
da_xu 2004-07-22
  • 打赏
  • 举报
回复
模板类
#include <map>
#pragma warning (disable : 4786)

using namespace std;

template <class T,int array_size>
class aaa{
private:
map<T*,int> m_map;
public:
T m_Array[array_size];
int push_back(T item);
int size();
bool erase(int position);
bool erase(T* obj);
bool at(int index,T* value);
T* atobjpoint(int index);
int getposition(T* item);

}

class myclass{
....
}

调用类"bbb.h"
#include "aaa.h"
class bbb {
aaa<myclass,100> list;
}

这样写出错,假如把aaa<myclass,100> list;移到bbb实现的CPP文件的某个函数则正常。
请问是为什么,谢谢
freefalcon 2004-07-22
  • 打赏
  • 举报
回复
up,代码能清楚点吗?
lingjingqiu 2004-07-22
  • 打赏
  • 举报
回复
不好意思,误解题目了~
lingjingqiu 2004-07-22
  • 打赏
  • 举报
回复
template<class myclass>
class B
{
private:
A<myclass> b;
}
darcymei 2004-07-22
  • 打赏
  • 举报
回复
摆脱 认真对待你的问题
不想贴代码可以写一个对应的小例子
da_xu 2004-07-22
  • 打赏
  • 举报
回复
刚才有点中文注释不清楚,重新发一遍模板类定义
#include <map>
#pragma warning (disable : 4786)

using namespace std;

template <class T,int array_size>
class CFineList
{
public:
CFineList();
virtual ~CFineList();

private:
int m_size;
CFineFIFOQueue<int ,array_size> m_FreeQueue;
map<T*,int> m_map;
CFineLock m_lock;

public:
T m_Array[array_size];
int push_back(T item);
int size();
bool erase(int position);
bool erase(T* obj);
bool at(int index,T* value);
T* atobjpoint(int index);
int getposition(T* item);

};
da_xu 2004-07-22
  • 打赏
  • 举报
回复
包含头文件,myclass是我的类
#include "MemAgent.h"
#include <map>
#pragma warning (disable : 4786)

using namespace std;

//ÁбíÖдæ·Å¶ÔÏ󣬵«mapÊǶÔÏóµÄÖ¸Õ룬±ÜÃâ¿Õ¼äÀË·Ñ
template <class T,int array_size>
class CFineList
{
public:
CFineList();
virtual ~CFineList();

private:
int m_size; //±íʾ¶ÓÁÐÖжÔÏóµÄ¸öÊý
CFineFIFOQueue<int ,array_size> m_FreeQueue;//±íʾ¿ÕÏжÓÁÐ
map<T*,int> m_map; //¸ù¾Ý¶ÔÏó¿ÉÒԺܿ춨λµ½¶ÔÏóÔÚÊý×éÖеÄλÖ㬷½±ãɾ³ý
CFineLock m_lock; //¶ÓÁÐËø

public:
T m_Array[array_size];
int push_back(T item); //·µ»Ø¶ÓÁеÄÊý×éϱêºÅ
int size();
bool erase(int position); //¸ù¾ÝÊý×éÖеÄλÖÃɾ³ý¡£
bool erase(T* obj); //¸ù¾Ý¶ÔÏóµÄλÖÃɾ³ý¡£
bool at(int index,T* value);//¸ù¾ÝϱêÖµ·µ»Ø¶ÔÏó£¬valueÊÇOutÀàÐͲÎÊý
T* atobjpoint(int index); //¸ù¾ÝϱêÖµ·µ»Ø¶ÔÏóÖ¸Õë
int getposition(T* item);

};

template <class T,int array_size>
CFineList<T,array_size>::CFineList()
{
m_size = 0;
m_lock.Initialize();
m_map.clear();
for(int i= 0; i<array_size; i++) {
m_FreeQueue.push_back(i);
}

}
。。。。模板实现


调用
#include "FineList.h"


class CMemAgent : public CMemObject
{
public:
CMemAgent();
virtual ~CMemAgent();

CFineList< CMemAgent,8> m_AgentList;
}
antijpn 2004-07-22
  • 打赏
  • 举报
回复
myclass是不是一个类啊?
RookieStar 2004-07-22
  • 打赏
  • 举报
回复
贴源代码先
北极猩猩 2004-07-22
  • 打赏
  • 举报
回复
应该是没有包含定义把
owl2008 2004-07-22
  • 打赏
  • 举报
回复
给出完整的代码,这样让人怎么帮您
freefalcon 2004-07-22
  • 打赏
  • 举报
回复
和楼上同问
geesun 2004-07-22
  • 打赏
  • 举报
回复
class B 中包含了模板的头文件没有!

64,639

社区成员

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

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