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

typedef istack<size_t> IndexStack;

我通过声明一个堆栈
IndexStack    stack;

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

GCC出现以下错误



我该如何运作?

最佳答案

#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]

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

给定的候选与 call 不匹配,因为引用是非常量的。临时内容(例如a.size()的结果)不能绑定(bind)到非常量引用。
push_back应该采用const T& value

09-19 10:39