我有一个定义为
的类class dimension{
public:
dimension();
const char* getname();
long ing getlength();
void setname(const char* text)
void setlength(long int size)
virtual ~dimension();
private:
const char* name;
long int length;
}
我收到有关函数setname
和setlength
的重要性的错误,因此它们的定义如下:
void dimension::setname(const char* text)
{
dimension::name = text;
}
void dimension::setlength(long int size)
{
dimension::length = size;
}
现在我有2个函数用于从文件中读取类维度的对象数组。他们的定义是。
void read_dimension(dimension** dims, int*ndims, const char* text, long int size)
{
int i;
*dims = new dimension[*ndims];
for(i=0; i<ndims; i++)
{
(*dims)[i].setname(text)
(*dims)[i].setlength(size)
}
}
void read_file(char *path, dimension** dims, int *ndims)
{
//do-- open file and read the variables ndims, text and size from it.
read_dimension(dims, ndims, text, size);
//do-- print name and length of all elements of (*dims).
}
现在,我将主要中的这些功能称为
int main()
{
//do-- get file path
dimesnion* gdims;
int num_dims;
read_file(path, &gdims, &num_dims);
//do-- print name and length of each element of gdims.
return 0;
}
当我运行代码时,从函数"name"
和read_dimension()
打印的变量main()
不同,但变量"length"
是相同的。
I无法弄清楚为什么会发生这种情况。
如果有人能提供帮助,我会很高兴。
答案 0 :(得分:0)
毫无疑问,text是read_dimension函数中的局部变量,可能是char数组。 dimension :: setname指定一个指向另一个的指针,如前所述,当read_dimension函数中的文本变量超出范围时会发生什么?它会死...现在你在维度类中的指针指向“无处”。 我更喜欢使用const char *作为字符串文字或指向字符数组中的某些char的指针。如果你想存储一个字符串,你可以通过strcpy复制它,当然必须存在具有足够空间的char的目标数组。
此代码的用途是什么:dimension :: name = text;和dimension :: length = size;在setname和setlength方法?你在维度类的范围内,不是吗?