size_t и unsigned int не совпадают в списке параметров функции шаблона - PullRequest
1 голос
/ 16 октября 2010

Я хочу использовать стек для хранения индексов массива, поэтому я использую следующий 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]

Как мне заставить это работать?

1 Ответ

5 голосов
/ 16 октября 2010
#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()) не может быть привязан к неконстантной ссылке.

push_back должен принимать const T& value

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...