错误转换为请求的非标量类型

时间:2013-01-23 23:10:44

标签: c++ gcc comparison

我的错误:

  

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

我的智慧结束了。我不知道我做错了什么或实际问题出在哪里。非常感谢任何帮助

1 个答案:

答案 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){ ... }