Template - 类对象 - Class对象的结构

时间:2012-04-12 13:14:05

标签: c++ oop

(*我必须使用我的数组结构,它必须是动态的)

我希望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'

2 个答案:

答案 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函数参数。