【问题标题】:const T * search ( const T &) return not workingconst T * search ( const T &) 返回不工作
【发布时间】:2014-01-02 23:06:38
【问题描述】:

我有这个问题,我开始使用这个功能后我的程序崩溃了。我不知道如何正确返回所需的类型。它是模板中的二进制搜索。我尝试将其更改为 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;
}

【问题讨论】:

  • 没有足够的代码上下文来说明!
  • array的类型是什么?
  • array 来自哪里?能否请您发布一些调用它的代码?
  • 在错误消息中有名称 X。但是在您的代码 sn-p 中没有这样的名称。
  • 你可以尝试返回索引值而不是指针吗?

标签: c++ types reference return constants


【解决方案1】:

numberOfElements 为 0 时,您的函数失败。您有以下行:

unsigned high = numberOfElements-1;

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

关于你对return声明的问题,你现在的说法是正确的。

【讨论】:

    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    相关资源
    最近更新 更多