无法将矢量输出到.txt文件

时间:2015-05-31 02:16:00

标签: c++ class vector reference

我已经挣扎了一段时间了,我终于伸出援手了。我通过readData函数从文本文件中读取数据。在该函数中,我调用ELement类的函数将元素数据读入向量向量。然后我尝试通过writeData函数将数据写入文本文件,这就是我的问题所在。当我编译并运行时,outputfile包含我写入除了Element数据之外的所有其他数据。我还需要能够通过其他功能访问此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;
};

1 个答案:

答案 0 :(得分:0)

问题是你创建了一个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
};