-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 回答