【发布时间】: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