我有一个标题,我在其中声明了一个函数。然后我创建该函数并尝试使用它,但我得到一个错误。这是参考,但我不知道为什么它不工作。
struct.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_ */
struct.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
}
ERROR:
..\M.cpp:22:14: error: no matching function for call to 'dummyData(Array<Expe>*)'
答案 0 :(得分:4)
dummyData(&A);
应该是:
dummyData(A);
<强>理由:强>
你的函数接受引用而不是指针,&A
表示你传递的类型的地址只能通过指向该类型的指针接收,并且你没有该函数的重载版本,因此错误
答案 1 :(得分:2)
如果通过引用传递对象,请不要像在此处那样传递其地址:
dummyData(&A);
只需传递对象本身(作为参考是别名):
dummyData(A);
答案 2 :(得分:1)
您不应该通过引用传递引用&
来传递变量,只需传递它即可。
dummyData(A);
通过引用传递意味着您没有复制对象,而是使用对象本身,如果作为变量传递(不是const
),更改将影响它。
答案 3 :(得分:1)
dummyData(&A);
应该是
dummyData(A);
此上下文中的&
运算符采用A
的地址作为指针。要传递引用,只需使用实际的变量名称。