模板 - 类对象 - 类对象的结构

Template - class object - struct of Class objects

本文关键字:对象 结构 模板      更新时间:2023-10-16

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

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

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

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

此外,Arr是一个模板,因此你不能键入 def 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];

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

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

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