size_t和unsigned int在模板函数的参数列表中不匹配

luo*_*uoq 1 c++ templates

我想使用堆栈来存储数组的索引,所以我使用以下typedef,其中istack是堆栈的模板类:

typedef istack<size_t> IndexStack;
Run Code Online (Sandbox Code Playgroud)

并且我声明了一个堆栈

IndexStack    stack;
Run Code Online (Sandbox Code Playgroud)

但是当我调用以下函数时(其中A.size()返回size_t);

stack.push_back(A.size());
Run Code Online (Sandbox Code Playgroud)

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]

我怎样才能使它工作?

Unc*_*ens 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());
}
Run Code Online (Sandbox Code Playgroud)

此代码会产生错误

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]
Run Code Online (Sandbox Code Playgroud)

请注意,它列出了候选人.(我怀疑你没有阅读/发布整个错误消息.)

给定的候选者与调用不匹配,因为引用是非const的.临时(例如结果a.size())不能绑定到非const引用.

push_back 应该拿一个 const T& value