Я пытался скомпилировать и поиграть с амперсандами и до сих пор не могу понять, что такое ошибка. Есть идеи?Преобразование из int * в int &
qsort.cc:22:23: error: no matching function for call to ‘qsort<int>::quicksort(std::vector<int, std::allocator<int> >*)’
qsort.cc:22:23: note: candidate is:
qsort.h:16:6: note: void qsort<T>::quicksort(std::vector<T>&) [with T = int]
qsort.h:16:6: note: no known conversion for argument 1 from ‘std::vector<int, std::allocator<int> >*’ to ‘std::vector<int, std::allocator<int> >&’
Заголовок:
template <class T>
class qsort
{
public:
void quicksort(vector<T> &v);
void qusort(vector<T> &v, int left, int right);
void print(vector<T> &v);
};
template <class T>
void qsort<T>::quicksort(vector<T> &v)
{
qusort(&v, 0, 0);
}
template <class T>
void qsort<T>::print(vector<T> &v)
{
for(int i = 0; i < v.size(); i++)
{
cout << v[i] << endl;
}
}
Главная:
int main()
{
qsort<int> asort;
vector<int> v;
v.push_back(2);
v.push_back(1);
v.push_back(7);
v.push_back(3);
v.push_back(8);
v.push_back(4);
v.push_back(0);
v.push_back(9);
v.push_back(5);
v.push_back(6);
asort.quicksort(&v);
asort.print(&v);
return 0;
}
Обновленные ошибки после того, как амперсанд удалены из главных вызовов функций (короткая версия)
qsort.h: В элементе function 'void quisort :: qusort (std :: vector &, int, int) [с T = int]':qsort.h: 18: 5: экземпляр от 'пустого quisort :: (станд сортировки :: вектор &) [с Т = INT]'
qsort.cc:22:22: инстанцирован здесь qsort.h : 27: 38: ошибка: неверное преобразование из 'int' в 'const char *' [-fpermissive] /usr/include/c++/4.6/bits/basic_string.tcc:214:5: ошибка: инициализация аргумента 1 из ' станд :: basic_string < _CharT, _Traits, _Alloc> :: basic_string (Const _CharT * Const _Alloc &) [с _CharT = голец, _Traits = станд :: char_traits, _Alloc = станд :: распределитель] [-fpermissive]
qsort.h: 18: 5: экземпляр из 'void quisort :: quicksort (std :: vector &) [с T = int] ' qsort.cc:22:22: экземпляр отсюда qsort.h: 31: 9: ошибка: нет соответствия для' operator < 'in' (& v) -> std :: vector < _Tp, _Alloc> :: operator [] [с _Tp = int, _Alloc = std :: allocator, std :: vector < _Tp, _Alloc> :: reference = int &, std :: vector < _Tp, _Alloc>: : size_type = long unsigned int] (((long unsigned int) i)) < pivot ' qsort.h: 31: 9: примечание: кандидаты: /usr/include/c++/4.6/bits/stl_pair.h: 207: 5: примечание: шаблон bool std :: оператор < (const std :: пара < _T1, _T2> &, const std :: пара < _T1, _T2> &) /usr/include/c++/4.6/bits/stl_iterator.h:291:5: Примечание: Шаблон BOOL станд :: Оператор < (Const станд :: reverse_iterator < _Iterator> &, Const станд :: reverse_iterator < _Iterator> &)
Side Примечание: Я бы посоветовал вам изменить имя класса или поместить его в пространстве имен, так как имя 'qsort' уже занят стандартной библиотеки реализация ['std :: qsort'] (http://en.cppreference.com/w/cpp/algorithm/qsort). – WhozCraig
@WhozCraig Спасибо, я этого не осознал и изменил. – user2057191