我想使用堆栈来存储数组的索引,所以我使用以下typedef,其中istack是堆栈的模板类:
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]
我怎样才能让它发挥作用?
答案 0 :(得分: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]
请注意,它列出了候选人。 (我怀疑你没有阅读/发布整个错误信息。)
给定的候选者与调用不匹配,因为引用是非const的。临时(例如a.size()
的结果)不能绑定到非const引用。
push_back
应该采用const T& value