【发布时间】:2016-05-18 20:14:18
【问题描述】:
每当我尝试运行我的代码时,我都会收到这些错误行。似乎有时它会使程序崩溃。这是可能的还是其他原因导致崩溃? 错误代码出现在以下几行:
Buffer<char*> s(20,"s.txt","rw"); //20 long char*
for(unsigned int i=0;i<24;i++){ //it overwrites the size of s after default 20
s[i]="hey"; //error here: "deprecated conversion from string constant to 'char*'"
类是这样的(删除了不重要的部分):
template<class T>
class Buffer:public File_ptr
{
unsigned int siz;
T *data;
public:
///constructor(size,filename,openmode)
Buffer(unsigned int s,const char* n, const char* m):File_ptr(n,m),siz(s)
{
data= new T[siz];
/* for(unsigned int i=0; i<siz; ++i)
{
data[i]=0;
}; */
};
///destructor
~Buffer()
{
delete[] data;
}
///operator[]
T& operator[](unsigned int i)
{
if(i>siz-1)
{
unsigned int newsize=siz*2;
T* tmp=new T[newsize];
for(unsigned int j = 0; j < siz; j++)
{
tmp[j] = data[j];
}
siz=newsize;
delete[] data;
data=tmp;
};
return data[i];
};
知道为什么我会收到错误消息吗? 提前致谢!
【问题讨论】:
-
为什么不简单地将
std::vector<T>用作Buffer的成员?那么如果缓冲区不够大,就让Buffer::operator[]直接调用vector::resize()? -
很遗憾,我们禁止在这个作业中使用 STL。
-
好吧,你 1) 不能安全地复制缓冲区,2) 你不能在使用
const缓冲区的函数中调用operator []。我把它留给你的老师(或你自己)来解决这些问题。此外,在这个 C++ 时代甚至不使用std::string简直太离谱了。