我正在尝试使用模板函数在 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;
}
}
最佳答案
您的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)。我假设您正在编译 C++11 之前的版本,在这种情况下,您看到的是 x
初始化时使用的任何不确定值。
不确定您需要 out
做什么,但您要么希望它引用不同的文件,要么以追加模式打开它。
无论 out
是否正在截断文件,>>
操作都可能失败。如果失败,您将获得垃圾数据(或 0
)。因此,您需要检查该操作的结果。
注意:无论你在哪里使用char*
,你都应该使用const char*
。从字符串文字到 char*
的转换已弃用(如果您在启用警告的情况下进行编译,您会看到这一点)。
关于c++ - 模板函数在读取时返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37416636/