-3

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

我希望Array结构中充满Expe类对象。我正在使用模板,但不知何故我的结构标头无法识别我创建的模板。

结构头:

template <class T>;
struct Arr{
    int days;
    T * M;
};
typedef Arr* Array;

结构 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'
4

2 回答 2

1

你在template<class T>and之间有一个分号struct Arr,它不属于那里。所以改成

template <class T> struct Arr{ int days; T * M; };

此外Arr是一个模板,因此您不能 typedefArr*Array, only 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];

可能还有其他问题,但这就是我从问题中可以看到的。

当然,除了编译之外,您的代码也存在问题(违反三规则和缺乏异常安全性)。

于 2012-04-12T13:20:49.810 回答
0

您必须删除结构声明中的分号。此外,当您创建这种类型的对象时,您必须指定模板类名称。而且您不能将指针放入引用中。事实上,你不能把任何东西放在引用中,它们是常量。使用指针而不是引用作为 constr 函数参数。

于 2012-04-12T13:29:15.547 回答