我想使用我的重载ostream<<将我的矩阵写入文件运营商。有一个打印矩阵的功能。现在我想用这个函数在我的文件中写入矩阵。但我把我的矩阵的地址写入文件,我知道为什么,但我怎么能把矩阵写入文件?
ProgressBar
答案 0 :(得分:0)
这是因为您使用file << &mrx
写了mrx
的地址。这是指向指向int
的指针的指针。您实际上并未编写matrix
对象m
:
file << m;
答案 1 :(得分:0)
你不应该通过引用给mrx,代码工作并在文件中保存矩阵,但你必须记住,该函数应该有一些正文(因为你在代码中没有正文)
您的operator<<
效果不佳,他应该将数据保存到std::ostream stream
您必须std::cout
,现在工作正常。
#include <iostream>
#include <fstream>
using namespace std;
class matrix
{
private:
int i;
int j;
int ** mrx;
public:
matrix(); // Konstruktor I
matrix(int a, int b); // Konstruktor II
~matrix(); // Destruktor
void fill_data() {}; // fill matrix
void print(){}; // print matrix
bool ToFile(string filename, matrix &m); // MY PROBLEM!!!
bool FromFile(string filename) { return 0; }; // reading from file
friend ostream & operator << (ostream &stream, matrix & m);
};
matrix::matrix()
{
i = j = 0;
mrx = NULL;
}
matrix::matrix(int a, int b) //1
{
i = a;
j = b;
mrx = new int *[i];
for (int x = 0; x < i; x++)
mrx[x] = new int[j];
for (int x = 0; x < i; x++)
for (int z = 0; z < j; z++)
mrx[x][z] = 0;
}
matrix::~matrix()
{
for (int x = 0; x < i; x++)
delete[] mrx[x];
delete[] mrx;
mrx = NULL;
}
ostream& operator << (ostream& stream, matrix &m)
{
for (int x = 0; x < m.i; x++) {
for (int z = 0; z < m.j; z++)
stream << m.mrx[x][z] << " ";
stream << endl;
}
return stream;
}
bool matrix::ToFile(string filename, matrix &m)
{
ofstream file;
file.open(filename);
if (file.is_open())
{
file << i << " " << j << "\n";
file << m;
file.close();
return true;
}
else
{
cout << "Failed" << endl;
return false;
}
}
int main()
{
matrix A(4, 4);
A.print();
A.fill_data();
cout << "_____________ Matrix A ______________" << endl;
A.print();
cout << "_____________________________________" << endl;
cout << endl;
A.ToFile("testfile.txt", A);
matrix C(6, 6);
C.FromFile("testfile.txt");
C.print();
cout << A << endl << endl << C;
return 0;
}