0

我有一个类定义为,

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;
}

当我运行代码时,"name"从函数打印read_dimension()的变量main()不同,但变量"length"是相同的。
我无法弄清楚为什么会这样。
如果有人可以提供帮助,我会很高兴。

4

1 回答 1

0

毫无疑问 text 是 read_dimension 函数中的一个局部变量,可能是一个 char 数组。dimension::setname 将一个指针分配给另一个指针,如前所述,当 read_dimension 函数中的文本变量超出范围时会发生什么?它会死的......现在你在维度类中的指针指向“无处”。我更喜欢使用 const char * 作为字符串文字或作为指向字符数组中某个字符的指针。如果你想存储一个字符串,你可能会通过 strcpy 复制它,当然必须存在具有足够空间的 char 目标数组。

这段代码的目的是什么: dimension::name = text; 和尺寸::长度=尺寸;在 setname 和 setlength 方法中?你在维度类的范围内,不是吗?

于 2013-06-04T07:41:52.047 回答