0

私は構造を持っています:

template <class T> struct Array{
int days;
T * M;
Array( int size ) : days(size), M(new T[size])
{
}
~Array()
{
   delete[] M;
}
};

void currentDay();
void add(int,int,Array &);

そしてクラス:

class Expe {
private:
    int hk;     //HouseKeeping
    int fo;     //Food
    int tr;     //Transport
    int cl;     //Clothing
    int tn;     //TelNet
    int ot;     //Others

 }

クラス コンストラクターは次のとおりです。

Expe::Expe() {
this->hk = hk;
this->fo = fo;
this->tr = tr;
this->cl = cl;
this->tn = tn;
this->ot = ot;
}

問題:メイン関数では、オブジェクトを使用して構造を操作できます...たとえばsetObj()関数を使用しますが、ControllerまたはController.hiで関数を定義しようとすると、次のエラーが発生します:

..\ListStruc.cpp:28:28: error: 'Array' is not a type
..\ListStruc.cpp: In function 'void add(int, int, int)':
..\ListStruc.cpp:31:4: error: request for member 'M' in 'A', which is of non-class type 'int'

編集:

void add(int cant, int tip,Array A){
//Adds to current day the amount to a specific type

A.M[currentDay]; // i try to use this object.
}
4

1 に答える 1

2

この宣言は正しくありません:

void add(int,int,Array &);

Arrayはクラス テンプレートであるため、関数もテンプレートであるadd必要があります。

template <class T>
void add(int,int,Array<T> &);

さらに、add関数の定義はパラメーターを値で受け取りますが、宣言はパラメーターを参照で受け取ります。

于 2012-04-16T12:47:11.987 に答える