2012-04-18 107 views
-2

我有一个标题,我声明了一个函数。然后我创建该函数并尝试使用它,但我得到一个错误。这是通过引用,但我不知道为什么它不工作。参考错误

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>*)' 

回答

4
dummyData(&A); 

应该是:

dummyData(A); 

理由:
你的功能需要引用不是指针,&A意味着你是路过这只能接受由一个指针类型的类型地址而且你没有该函数的重载版本,因此是错误的。

1

你不应该把引用&通过引用传递一个变量,只需传递它。

dummyData(A); 

传递引用意味着你不复制对象,而不是正在使用的对象自身,并且如果作为变量传递(未const)变化会影响它。

+0

改变dummyData (一个); D:\ C++ \ Begin \ Lab3-5_OOP \ Debug /../ M.cpp:22:未定义引用'void dummyData (Array &)' – 2012-04-18 16:12:46

+0

您有'#include'd文件吗'dummyData '被宣布? – 2012-04-18 16:15:43

+0

在M.cpp中我有includet #include“Expe.h” #include“ListStruc.h” – 2012-04-18 16:19:05

1
dummyData(&A);  

应该是

dummyData(A); 

&操作者在这种情况下,走的A其地址是一个指针。要传递引用,只需使用实际的变量名称。

+0

改了dummyData(A);但仍然是D:\ C++ \ Begin \ Lab3-5_OOP \ Debug /../ M.cpp:22:未定义引用'void dummyData (Array &)' – 2012-04-18 16:15:58

2

如果通过引用传递对象,不通过其地址,像你这样在这里:

dummyData(&A); 

只是传递对象本身(如引用是它的别名):

dummyData(A); 
+0

changed dummyData(A);但仍然是D:\ C++ \ Begin \ Lab3-5_OOP \ Debug /../ M。CPP:22:未定义的引用'无效dummyData (阵列&)” – 2012-04-18 16:16:33

+0

@BogdanMaier这完全是另外一个问题,这是在这里得到解答:http://stackoverflow.com/questions/1724036/splitting-templated-c-classes -INTO-HPP-CPP-文件 - 是 - 它,可能 – 2012-04-18 16:24:20

+0

你需要移动模板函数实施头文件,如罗布'主()'你需要注明确切类型,而不是'Expe',这是注意到+只是模板参数的名称 – 2012-04-18 16:27:52