找不出错误?

pig444555 2007-12-22 03:11:57
按照书上写了个程序,可总是有错,可对照也找不出错误。
类模板
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <stdexcept>
template<typename T> class Array{
private:
T* elements;
size_t size;
public:
explicit Array(size_t arraysize);
Array(const Array &theArray);
~Array();
T& operator[](size_t index);
const T& operator[](size_t index) const;
Array& operator=(const Array& rhs);
};
template<typename T>
Array<T>::Array(size_t arraysize):size(arraysize)
{
elements = new T[size];

}
template<typename T>
Array<T>::Array(const Array& theArray)
{
size=theArray.size;
elements= new T[size];
for(int i=0;i<(int)size;i++)
{
elements[i]=theArray.elements[i];
}

}
template<typename T>
Array<T>::~Array()
{
delete [] elements;

}
template<typename T>
const T& Array<T>::operator[](size_t index) const
{
if(index<0||index>=size)
throw std::out_of_range(index<0 ? "Negative Index" : "Index too large");
return elements[index] ;
}
template<typename T>
T& Array<T>::operator[](size_t index)
{
if(index<0 || index >=size) //A
throw std::out_of_range(index<0 ? "Negative Index" : "Index too large");//B
return elements[index] ;
}
template<typename T>
Array<T>& Array<T>::operator=(const Array& rhs)
{
if(&rhs==this)
return *this;
if(elements)
delete [] elements;
size=rhs.size;
elements=new T[rhs.size];
for(int i=0;i<size;i++)
elements[i]=rhs.elements[i];
}
#endif
运行
void __fastcall TForm1::Button1Click(TObject *Sender)
{
const int n=20;
Array<int> intd(n);
for(int i=0;i<20;i++)
{
intd[i]=i++;

}
Label1->Caption = IntToStr(intd[19]); //显示的数值总是不对

}
出了有上面的那个错误以外,还有两个错无
总是提示A,B出的以下错误
A W8008 Condition is always false
B W8008 Condition is always false
那位帮这调试一下,看错在那里
...全文
63 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ydlchina 2007-12-23
  • 打赏
  • 举报
回复
intd[i]=i; //修改
ydlchina 2007-12-23
  • 打赏
  • 举报
回复
修改
template<typename T> class Array{
private:
T* elements;
int size;//修改
public:
explicit Array(int arraysize);
Array(const Array &theArray);
~Array();
T& operator[](int index);//修改
const T& operator[](int index) const;//修改
Array& operator=(const Array& rhs);
};
template<typename T>
Array<T>::Array(int arraysize):size(arraysize)
{
elements = new T[size];

}
template<typename T>
Array<T>::Array(const Array& theArray)
{
size=theArray.size;
elements= new T[size];
for(int i=0;i<(int)size;i++)
{
elements[i]=theArray.elements[i];
}

}
template<typename T>
Array<T>::~Array()
{
delete [] elements;

}
template<typename T>
const T& Array<T>::operator[](int index) const
{
if(index<0||index>=size)
throw std::out_of_range(index<0 ? "Negative Index" : "Index too large");
return elements[index] ;
}
template<typename T>
T& Array<T>::operator[](int index)
{
if(index<0 || index >=size)
throw std::out_of_range(index<0 ? "Negative Index" : "Index too large");
return elements[index] ;
}
template<typename T>
Array<T>& Array<T>::operator=(const Array& rhs)
{
if(&rhs==this)
return *this;
if(elements)
delete [] elements;
size=rhs.size;
elements=new T[rhs.size];
for(int i=0;i<size;i++)
elements[i]=rhs.elements[i];
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
const int n=20;
Array <int> intd(n);
for(int i=0;i <20;i++)
{
intd[i]=; //修改

}
Label1-> Caption = IntToStr(intd[19]);

}
Waiting4you 2007-12-23
  • 打赏
  • 举报
回复
立于A,B警告:因为size_t是无符号整数,所以size_t类型的index不可能小于0的。

for(int i=0;i<20;i++) //这里也有i++
{
intd[i]=i++; //这里有i++
}
实际上这个循环只转了10次。
fangshk2007 2007-12-22
  • 打赏
  • 举报
回复
看一下,为什么会不对,先理解一下思路,然后在试一下,很多时候问题会在不经意间解决,这个时候你已经进步了
ydlchina 2007-12-22
  • 打赏
  • 举报
回复
前面的正确,就最后一个不对

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧