0

私のエラー:

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: エラー: /usr/include/c++/4.4/bits/vector.tcc:156 に一致しません'operator=':'*(p_vec + ((long unsigned int)(((long unsigned int)upper) * 24ul))) = temp'
注: 候補それは: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

私は途方に暮れています。何が間違っているのか、実際の問題がどこにあるのかわかりません。どんな助けでも大歓迎です

4

1 に答える 1

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){ ... }
于 2013-01-23T23:12:28.670 に答える