【发布时间】:2013-06-04 07:10:58
【问题描述】:
我有一个类定义为,
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 个函数用于从文件中读取类维度的对象数组。他们的定义是as。
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).
}
现在,我在 main 中将这些函数称为
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;
}
当我运行代码时,从函数 read_dimension() 和 main() 打印的变量 "name" 是不同的,但变量 "length" 是相同的。
我不知道为什么会这样.
如果有人能提供帮助,我会很高兴。
【问题讨论】:
-
函数 read_dimension 中声明的文本在哪里?
-
您发布的
read_dimension似乎被截断了。特别是,变量text来自哪里?注意name只是一个char指针,所以如果你在离开read_dimension之后删除底层数组,name将指向垃圾。 -
为什么不改用
std::string和std::vector? -
您发布的代码无法编译。请发布 SSCCE (sscce.org)
-
@ComicSansMS,好的,有问题了...当我离开函数 read() 时,指向 name 的指针被删除,谢谢...!!