(*我必须使用我的数组结构,它必须是动态的)
我希望Array
结构填充Expe
类对象。我正在使用模板但不知何故我的struct header无法识别我创建的模板。
结构标题:
template <class T>;
struct Arr{
int days;
T * M;
};
typedef Arr* Array;
Struct cpp:
void constr(Array &o){
//Construct of 31*1 Matrix
o=new Arr;
o->days = 31;
o->M = new T[o->days];
我认为应该没问题,但我得到错误:
..\ListStruc.cpp:26:13: error: expected type-specifier before 'T'
答案 0 :(得分:1)
您在template<class T>
和struct Arr
之间有一个分号,它不属于那里。所以把它改成
template <class T> struct Arr{ int days; T * M; };
此外Arr
是一个模板,因此您无法将Arr*
定义为Array
,仅Arr<someConcreteType>*
。
最后的模板函数必须在标题中实现,如上所述,你的typedef不起作用,所以将constr
放在标题中并将其更改为:
template<class T> void constr(Arr<T>*& o){
o=new Arr<T>;
o->days = 31;
o->M = new T[o->days];
可能还有其他问题,但我可以从问题中看到这一点。
当然,除了编译(违反the rule of three和缺乏异常安全性)之外,您的代码也存在问题。
答案 1 :(得分:0)
您必须删除结构声明中的分号。 此外,在创建此类型的对象时,必须指定模板类名称。 而且你不能把指针放到引用中。 实际上你不能在引用中放任何东西,它们是常量。使用指针而不是引用作为constr函数参数。