-2

関数を宣言するヘッダーがあります。次に、関数を作成して使用しようとしましたが、エラーが発生しました。参照によるものですが、なぜ機能しないのかわかりません。

構造体.h

#ifndef LISTSTRUC_H_
#define LISTSTRUC_H_


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

Array( int size ) : days(size), M(new T[size])
{
}
~Array()
{
   delete[] M;
}
};

void currentDay();

template <class Expe>
void dummyData(Array<Expe> &);

#endif /* LISTSTRUC_H_ */

構造体.cpp

void dummyData(Array <Expe> &A){
for(int i=0; i<31; i++){
    A.M[i].Expe::setObj((i*3),(i*1),(i*6),(i*2),(i*4),(i*5));
}
 }

M.cpp(メインcpp)

int main(){
//Main function of the program. no pre/ post condition.

    Array <Expe> A(31);   // Work space
    Array <Expe> B(31);   // Backup space

    dummyData(&A);         // error
 }

エラー:

..\M.cpp:22:14: error: no matching function for call to 'dummyData(Array<Expe>*)'
4

4 に答える 4

4
dummyData(&A);

次のようにする必要があります。

dummyData(A); 

根拠:
関数はポインターではなく参照を&A受け取ります。つまり、その型へのポインターによってのみ受け取ることができる型のアドレスを渡していることを意味し、関数のオーバーロードされたバージョンがないため、エラーが発生します。

于 2012-04-18T16:10:03.150 に答える
2

オブジェクトを参照渡しする場合は、ここで行ったように、そのアドレスを渡さないでください。

dummyData(&A); 

オブジェクト自体を渡すだけです(参照はそのエイリアスであるため):

dummyData(A); 
于 2012-04-18T16:11:40.467 に答える
1

&参照によって変数を渡すために参照を入れるべきではありません。単にそれを渡します。

dummyData(A);

参照渡しとは、オブジェクトをコピーするのではなく、オブジェクト自体を使用していることを意味し、変数として渡された場合 ( ではなくconst) 変更が影響します。

于 2012-04-18T16:10:17.313 に答える
1
dummyData(&A);    

する必要があります

dummyData(A);

このコンテキストの&演算子Aは、ポインタであるアドレスを取得しています。参照を渡すには、実際の変数名を使用するだけです。

于 2012-04-18T16:10:47.113 に答える