麻烦输出矢量到.txt文件

Trouble outputting vector to .txt file

本文关键字:txt 文件 输出 麻烦      更新时间:2023-10-16

我已经为此挣扎了一段时间了,我终于要寻求帮助了。我正在通过readData函数从文本文件中读取数据。在该函数中,我调用ELement类的函数将ELement数据读入向量的向量。然后,我试图通过writeData函数将数据写入文本文件,这就是我的问题所在。当我编译并运行时,outputfile包含除Element数据外写入的所有其他数据。我还需要能够通过其他函数访问此元素数据。

任何帮助,提示,或见解将不胜感激。我在下面附上了我认为是相关的代码。如果还需要,请告诉我。

谢谢!

readData功能:

void readData::readdata(ifstream &inp)
{
    Element r;
    r.addelementdata(inp);
};

addelementdata功能:

void Element::addelementdata(istream& inp) 
{
    int i,j,tmp;
    for (i = 0; i < d_numElems; i++)
    {
        vector<int>row;
        for (j = 0; j < 10; j++)
        {
            inp >> tmp;
            row.push_back(tmp);
        }
    elems_matrix.push_back(row);
    }
}

输出矩阵内容功能:

void Element::Elems_matrix_contents(ofstream& out)
{
    int i, j;
    for (i = 0; i < d_numElems; i++)
    {
        for (j = 0; j < 10; j++)
        {
            out << elems_matrix[i][j] << 't';
        }
    }
}

元素类:

class Element: public readData
{
protected:
    std::vector< std::vector<int> > elems_matrix;
public:
    // Constructors
    Element();
    //Destructor
    ~Element(){};
    // Functions
    void addelementdata(istream&inp);
    std::vector<std::vector < int >> elems_matrix_copy;
    void Elems_matrix_contents(ofstream& out);
};

readData类:

class readData 
{
public:
    readData();
    ~readData(){};
    void readdata(ifstream &inp);
    void writedata(ofstream &out);
};

writeData功能:

void readData::writedata(ofstream &out)
{
    out << "ELEMENT  " << "Material  " << "Nodes:  "<< endl;
    Element r;
    r.Elems_matrix_contents(out);
    out << "*******************************************************************" << endl << endl;
};

问题是您创建了类型为Element的局部变量并将数据读入该变量。因为它是局部的,所以在函数结束时被销毁:

void readData::readdata(ifstream &inp)
{
    Element r; // this will die at end of function
    r.addelementdata(inp);
};

与您的writedata()函数相同。创建一个全新的(空的)Element并输出:

void readData::writedata(ofstream &out)
{
    out << "ELEMENT  " << "Material  " << "Nodes:  "<< endl;
    Element r; // completely new contains nothing
    r.Elems_matrix_contents(out);
    out << "********************************************" << endl << endl;
};

也许你应该让Element r成为readData类的成员?

class readData
{
    Element r; // now all functions can use the same Element
    // ... blah blah blah
};