const T * search(const T&)返回不起作用

时间:2013-12-15 15:10:02

标签: c++ types reference return const

我有这个问题,我的程序在我开始使用此功能后崩溃了。我不知道如何正确返回所需的类型。它是模板中的二进制搜索。我尝试将其更改为T *搜索,将array[middle]转换为const并执行const T * out = &array[middle];之类的操作,但每当我添加&时,它都会崩溃。如果我拿走它只返回数组[中],它会说:

cannot convert 'Fractions' to 'const Fractions*' in return

我应该如何正确归还? 我有像这样声明的数组,这个函数在同一个类中:它应该适用于任何类型,我们给它类Fractions来测试它,所以它的类型Fractions的正常数组,没什么特别的。

   T * array;

   const T *search(const T &inElement){


    unsigned low = 0;
    unsigned high = numberOfElements-1;
    unsigned middle = 0;

    while(low <= high){

        middle = low + (high - low)/2;
        if( inElement == array[middle]){
            const T * out = &array[middle]; //problem here
            return out;

        }
        else if(inElement < array[middle]){
          high = middle -1;
        }
        else{
           low = middle + 1;
        }


    }

    return NULL;

}

指针和引用对我来说总是有问题的,我用向量阅读类似的主题并且仍然无法理解它。

我班上的其他人:

#include <iostream>
#include "Fractions.cpp"

using namespace std;




template<class T,unsigned n>

class SortedArray {

T * array;
unsigned length;
unsigned numberOfElements;
T element;
unsigned position;


public:

SortedArray() {
    length = n;
    array = new T[n];
    numberOfElements = 0;
    position = 0;
}



bool first(){

    if(numberOfElements >= 1){
        element = array[0];
        position = 0;
        return true;
    }
    return false;
}

bool next(){

 if(position+1 < numberofElements){
  position++;
  element = array[position];
  return true;
 }
 return false;

}

const T & aktual(){
 return element;
}


SortedArray & operator << (const T &element){


    if(numberOfElements == length || search(element) == NULL){return (*this);}
    if(numberOfElements == length){return (*this);}

    int i = numberOfElements;
    for (; i > 0 && array[i-1] > element; i--)
    {
        array[i] = array[i-1];
    }

    array[i] = element;
    numberOfElements++;
    return (*this);
}



operator unsigned () const{
return numberOfElements;
}



const T *search(const T &inElement){
//this is the function causing problems

}




~SortedArray() {
    delete [] array;
    array = NULL;
}




};



int main()
{

    SortedArray<Fractions,20> pz;

    typedef Fractions Z;

    pz << Z(1,3) << Z(3,5) << Z(7,4) << Z(3,4) << Z(2,3) << Z(7,2)

     << Z(5,4) << Z(1,4) << Z(6,7) << Z(4,3) << Z(2,3);


    cout << "\nNumber of elements : " << pz.operator unsigned() << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:2)

numberOfElements为0时,您的功能失败。您有以下行:

unsigned high = numberOfElements-1;

numberOfElements为0时,high会收到-1投放到unsigned int的值,这是一个非常大的数字。这将导致超出其结束的数组访问,这是未定义的行为并且经常会崩溃。

至于你关于return陈述的问题,你现在拥有的是正确的。