2013-04-22 3 views
0

Я пытался скомпилировать и поиграть с амперсандами и до сих пор не могу понять, что такое ошибка. Есть идеи?Преобразование из 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> &)

+0

Side Примечание: Я бы посоветовал вам изменить имя класса или поместить его в пространстве имен, так как имя 'qsort' уже занят стандартной библиотеки реализация ['std :: qsort'] (http://en.cppreference.com/w/cpp/algorithm/qsort). – WhozCraig

+0

@WhozCraig Спасибо, я этого не осознал и изменил. – user2057191

ответ

1

Ваша функция-член принимает аргументы по ссылке. Они не принимают указатели (то, что возвращается оператором адресов &). Вам просто нужно передать объект и ссылка будет связывать:

asort.quicksort(v); 
asort.print(v); 
+0

Проблема в том, когда я удаляю его. Я получаю массивный блок ошибок с большим количеством ошибок преобразования. – user2057191

+0

@ user2057191 Каковы ошибки? – 0x499602D2

+0

Я обновил главный пост с новыми ошибками. – user2057191

Смежные вопросы