在一个模板类的构造函数中调用另一个模板类的对象时出错...

#ifndefVECTOR_POINTER_H#defineVECTOR_POINTER_H#include"vector_array.h"#include"vector... #ifndef VECTOR_POINTER_H
#define VECTOR_POINTER_H

#include "vector_array.h"
#include "vector_date.h"

template<class T>
class vector_pointer{
public:
vector_pointer(vector_array<T>& array,unsigned int index):data(array.ap),sub(index){++(data->use);};
~vector_pointer(){if(--*data->use==0) delete data;};

T& operator[](unsigned index){return (*data)[index];};
T& operator*(){return (*data)[sub];};
private:
vector_date<T>* data;
unsigned int sub;
};

#endif
编译时报错:
d:\vc文件\数据结构\vector容器实现\vector_pointer.h(11) : error C2629: unexpected 'class vector_pointer<T> ('
d:\vc文件\数据结构\vector容器实现\vector_pointer.h(19) : see reference to class template instantiation 'vector_pointer<T>' being compiled
d:\vc文件\数据结构\vector容器实现\vector_pointer.h(11) : error C2334: unexpected token(s) preceding ':'; skipping apparent function body
d:\vc文件\数据结构\vector容器实现\vector_pointer.h(19) : see reference to class template instantiation 'vector_pointer<T>' being compiled
d:\vc文件\数据结构\vector容器实现\vector_pointer.h(17) : error C2143: syntax error : missing ';' before '<'
d:\vc文件\数据结构\vector容器实现\vector_pointer.h(19) : see reference to class template instantiation 'vector_pointer<T>' being compiled
d:\vc文件\数据结构\vector容器实现\vector_pointer.h(17) : error C2501: 'vector_date' : missing storage-class or type specifiers
d:\vc文件\数据结构\vector容器实现\vector_pointer.h(19) : see reference to class template instantiation 'vector_pointer<T>' being compiled
d:\vc文件\数据结构\vector容器实现\vector_pointer.h(17) : error C2059: syntax error : '<'
d:\vc文件\数据结构\vector容器实现\vector_pointer.h(19) : see reference to class template instantiation 'vector_pointer<T>' being compiled
d:\vc文件\数据结构\vector容器实现\vector_pointer.h(17) : error C2238: unexpected token(s) preceding ';'
d:\vc文件\数据结构\vector容器实现\vector_pointer.h(19) : see reference to class template instantiation 'vector_pointer<T>' being compiled
d:\vc文件\数据结构\vector容器实现\vector_date.h(9) : error C2059: syntax error : '<'
d:\vc文件\数据结构\vector容器实现\vector_date.h(19) : see reference to class template instantiation 'vector_date<T>' being compiled
d:\vc文件\数据结构\vector容器实现\vector_date.h(9) : error C2238: unexpected token(s) preceding ';'
d:\vc文件\数据结构\vector容器实现\vector_date.h(19) : see reference to class template instantiation 'vector_date<T>' being compiled
d:\vc文件\数据结构\vector容器实现\vector_array.h(18) : error C2989: 'vector_array' : template class has already been defined as a non-template class
d:\vc文件\数据结构\vector容器实现\vector_date.h(9) : see declaration of 'vector_array'
D:\VC文件\数据结构\vector容器实现\main.cpp(9) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Error executing cl.exe.
什么原因?
vector_array<T>代码:
#ifndef VECTOR_ARRAY_H
#define VECTOR_ARRAY_H

#include "vector_date.h"
#include "vector_pointer.h"

template<class T>
class vector_array{
public:
friend class vector_pointer<T>;
vector_array(unsigned size):ap(new vector_data(size)){};
~vector_array(){if(--*ap->use==0) delete ap;};

T& operator[](unsigned index){return (*ap)[index];};

private:
vector_date<T>* ap;
};

#endif

vector_pointer<T>代码:

#ifndef VECTOR_POINTER_H
#define VECTOR_POINTER_H

#include "vector_array.h"
#include "vector_date.h"

template<class T>
class vector_pointer{
public:
vector_pointer(vector_array<T>& array,unsigned int index):data(array.ap),sub(index){++(data->use);};
~vector_pointer(){if(--*data->use==0) delete data;};

T& operator[](unsigned index){return (*data)[index];};
T& operator*(){return (*data)[sub];};
private:
vector_date<T>* data;
unsigned int sub;
};

#endif
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
chiconysun
2012-04-06 · TA获得超过2.2万个赞
知道大有可为答主
回答量:5410
采纳率:92%
帮助的人:2600万
展开全部
这个要看到那两个类的.h文件才能断定啊
追问
带入如上,请帮忙确认下,我都快疯了...
追答
看不明白;因为光凭着你的代码没法确定,那两个模板类的实现是否在另外的Cpp文件中,如果是,需要包含Cpp文件而不是h文件
如果不是再试试看在
template
class vector_array{
public:
friend class vector_pointer;
之前加上这两行看看:
template
class vector_pointer;
并去掉#include "vector_pointer.h"
好像文件包含有点问题
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式