我正在尝试创建使用模板函数在c ++中读取和写入同一文件的类,并且我试图实现读取char或int的函数read()并返回它并且当我尝试运行它我得到的数字像-998324343请帮助:)
#include<iostream>
#include<fstream>
using namespace std;
template <class T>
class myFile
{
ifstream in;
ofstream out;
public:
myFile(char* fileName)
{
in.open(fileName);
if (!in.is_open())
throw"couldnt open file to reading";
out.open(fileName);
if (!out.is_open())
throw"couldnt open file to writing";
cout << read();
}
T read() {
T x;
in >> x;
return x;
}
};
int main()
{
try {
myFile<int> a("read.txt");
}
catch (char* msg) {
cout << msg << endl;
}
}
答案 0 :(得分:0)
您的out
和in
引用了同一个文件。所以当发生这种情况时:
in.open(fileName);
if (!in.is_open())
throw"couldnt open file to reading";
out.open(fileName);
假设fileName
作为文件存在,out
将截断文件,因此它变为空。随后的in >> x;
将失败(因为文件为空)并且根据您正在编译的C ++标准,x
将被清零(自C ++ 11以来)或保持不变(直到C ++ 11)。我假设您正在编译pre-C ++ 11,在这种情况下,您看到的是初始化的任何不确定值x
。
不确定您需要out
,但您要么引用其他文件,要么以追加模式打开它。
无论out
是否截断文件,>>
操作都可能失败。如果失败,您将获得垃圾数据(或0
)。所以你需要检查该操作的结果。
注意:您使用char*
的任何地方都应使用const char*
。不推荐使用从字符串文字到char*
的转换(如果在编译时启用了警告,您会看到这一点)。