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

标签 c++ templates

我想用栈来存储数组的索引,所以我使用了下面的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]

我怎样才能让它发挥作用?

最佳答案

#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() 的结果)不能绑定(bind)到非常量引用。

push_back 应该采用 const T& value

关于c++ - size_t 和 unsigned int 在模板函数的参数列表中不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3949434/

相关文章:

c++ - 获取 C++ 输出流中元素的大小

c++ - 在 C++ 中使用线程创建 QT gui?

c++ - 为什么在这种情况下需要模板消歧器?

c++ - 具有模板构造函数特化的模板类,用于初始化模板化基类

JavaScript 杂技 : How to declare an array, 元素和属性位于一个字符串中

c++ - 使用c++/WinRT Direct3D UWP Game DR模板Direct X11的错误消息

c++ - 带有第三个参数(即比较器函数)的重载 sort() 如何工作?

c++ - 可以在 C++ 中的字符串文字中写入 unicode 字符吗

php - 从行中选择最大的数字

C++ 模板不接受迭代器