2012-04-18 156 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