我的错误:
Main.cpp中包含的文件:18:
QuickSort.h:在成员函数'void CQuickSort<T>::Partition(std::vector<T, std::allocator<_CharT> >*, int, int, int) [with T = CMoviePointer]'
中:
QuickSort.h:49:从'void CQuickSort<T>::Sort(std::vector<T, std::allocator<_CharT> >*) [with T = CMoviePointer]'
实例化 Main.cpp:70:从这里实例化 QuickSort.h:31:错误:从'std::vector<CMoviePointer, std::allocator<CMoviePointer> >'
转换为请求的非标量类型'CMoviePointer'
QuickSort.h:49:从'void CQuickSort<T>::Sort(std::vector<T, std::allocator<_CharT> >*) [with T = CMoviePointer]'
实例化 Main.cpp:70:从这里实例化 QuickSort.h:35:错误:'operator='
中的'*(p_vec + ((long unsigned int)(((long unsigned int)upper) * 24ul))) = temp'
不匹配 /usr/include/c++/4.4/bits/vector.tcc:156:注意:候选人是:std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = CMoviePointer, _Alloc = std::allocator<CMoviePointer>]
这是我的计划。
#ifndef _QUICKSORT_H_
#define _QUICKSORT_H_
#include <vector>
template<class T>
class CQuickSort{
public:
void Partition(std::vector<T> *p_vec, int upper, int lower, int size){
if (size <2)
return;
int pivot_index = size/2;
pivot_index += lower;
while(lower < upper){ //do until start and end of list meet
while(p_vec[lower] < p_vec[pivot_index]){
lower--;
}
while(p_vec[pivot_index] < p_vec[upper]){
upper--;
}
T temp = p_vec[lower];
p_vec[lower] = p_vec[upper];
p_vec[upper] = temp; //swap upper and lower until lower is equal to or
}
}
void Sort(std::vector<T> *p_vec){
int size = p_vec->size();
if(size < 2)
return;
Partition(p_vec,0, size-1, size);
}
};
#endif
我的智慧结束了。我不知道我做错了什么或实际问题出在哪里。非常感谢任何帮助
答案 0 :(得分:3)
p_vec
是一个指针,你正在做像
p_vec[lower]
你可以解决这个问题:
(*p_vec)[lower] // or p_vec->operator[](lower)
或将矢量作为参考传递。
void Partition(std::vector<T>& p_vec, int upper, int lower, int size){ ... }