这是我的QFILE类的声明。
class AbsFileHandler
{
public:
QFile absfile;
QString absfilename;
QTextStream absstream;
void CreateAbsFile();
void CloseAbsFile();
AbsFileHandler()
{
}
~AbsFileHandler()
{
}
};
及其方法构建
void AbsFileHandler::CreateAbsFile()
{
absfilename = absfilename + '.abs';
absfile(absfilename);
if (!absfile.open(QIODevice::WriteOnly | QIODevice::Text))
qDebug() << absfile.errorString();
else
qDebug() << "It worked";
}
void AbsFileHandler::CloseAbsFile()
{
absfile.close();
}
我在absfile中遇到错误(absfilename);声明。为什么这个陈述中的错误。谢谢。
答案 0 :(得分:5)
在这一行
absfile(absfilename);
您尝试在QFile::operator()(QString)
对象上调用absfile
,但QFile
类没有此方法。我想你想在打开它之前设置文件的名称,所以你应该使用QFile的setName
(Qt3)或setFileName
(qt4 / 5)方法。改变它
absfile.setFileName(absfilename);
答案 1 :(得分:1)
你遇到了错误,因为看起来你想调用QFile
类的构造函数,如
QFile file(filename);
但问题是你之前声明了对象QFile
,并且在初始化AbsFileHandler
类的对象时在构造函数中初始化了它。
AbsFileHandler obj; // in this case default constructor AbsFileHandler::AbsFileHandler() will be called which empty (not empty actually)
AbsFileHandler::AbsFileHandler() {}
将通过调用默认构造函数来初始化类中的所有对象:
class A {
public:
A() : {} //Actually it means this:
// A() : f(QFile()) {}
private:
QFile f;
};
所以
absfile(absfilename);
并不意味着将调用构造函数QFile::QFile(const QString &name)
,而是调用类QFile::operator()(QString)
中未定义的QFile
。
这就是为什么你有错误。