2010-10-16 51 views
1

我想用一個堆棧來存儲數組的索引,所以我用下面的typedef,其中iStack技術是堆棧模板類:的size_t和unsigned int不模板函數的參數列表匹配

typedef istack<size_t> IndexStack; 

和我通過

IndexStack stack; 

聲明一個堆棧但是,當我調用下面的函數(其中A.size()返回一個爲size_t);

stack.push_back(A.size()); 

GCC提供了以下錯誤

sort.cpp: In function 'void quicksort2(Array&)':
sort.cpp:50:27: error: no matching function for call to 'istack<unsigned int>::push_back(size_t)'
iarray.h:103:8: note: candidate is: void istack<T>::push_back(T&) [with T = unsigned int]

我怎樣才能使它發揮作用?

+2

什麼類型呢你的push_back把參數作爲? – chappar 2010-10-16 15:15:30

+0

'push_back'可能帶有非const引用嗎?我認爲問題在於你不能在這種情況下通過臨時工。 – UncleBens 2010-10-16 15:16:54

+0

不要試圖用英語解釋你的代碼(它不是一種確切的語言)。只需將確切的代碼放入問題中(我們都可以很好地閱讀代碼)。保留你想要做的事情的英文解釋。 – 2010-10-16 18:29:38

回答

5
#include <cstddef> 
template <class T> 
struct istack 
{ 
    void push_back(T& value); 
    std::size_t size() const; 
}; 

int main() 
{ 
    typedef istack<size_t> IndexStack; 
    IndexStack a, stack; 
    stack.push_back(a.size()); 
} 

此代碼產生一個錯誤

In function 'int main()': 
13 no matching function for call to 'istack<unsigned int>::push_back(size_t)' 
note 5 candidates are: void istack<T>::push_back(T&) [with T = unsigned int] 

注意,它列出候選人。 (我懷疑你沒有閱讀/發佈整個錯誤信息。)

給定的候選者與該調用不匹配,因爲該引用是非常量的。臨時(例如a.size()的結果)不能綁定到非const引用。

push_back應採取const T& value

+0

這就是問題.push_back不需要const引用。通過我忘記粘貼第三行錯誤消息的方式。非常感謝您的回答。 – luoq 2010-10-16 15:45:45