Qt 为什么我会在这段代码中出错

Qt 为什么我会在这段代码中出错,qt,user-interface,qfile,Qt,User Interface,Qfile,我看过几个不同的教程,所有的代码看起来都一样,但当我试图编译它时,我得到了两个错误。它们与对(QFile)(QString&)的调用不匹配,与对(QTextSteam)(QFile)的调用不匹配。你能解释一下原因吗?下面是我的代码的一部分,如果您需要更多,请提问 我的头代码块 private: QLabel *label; QTextEdit *left; QTextEdit *right; QLineEdit *user; QTextStream file; QFile namefile; Q

我看过几个不同的教程,所有的代码看起来都一样,但当我试图编译它时,我得到了两个错误。它们与对(QFile)(QString&)的调用不匹配,与对(QTextSteam)(QFile)的调用不匹配。你能解释一下原因吗?下面是我的代码的一部分,如果您需要更多,请提问

我的头代码块

private:
QLabel *label;
QTextEdit *left;
QTextEdit *right;
QLineEdit *user;
QTextStream file;
QFile namefile;
QString name;
QString n;
我的源代码

n ="name.txt";
namefile(n);
if (!namefile.open(QFile::ReadOnly))
{
    return;
}
file(&namefile);
name=file.readLine();
right->setText(name);

你的问题似乎更多地与C++有关,而不是QT。特别是,您可以查看C++初始化列表,以及如何构造类成员。

在任何情况下,我都假设您列为“我的源代码”的代码位于类的构造函数中。一个选项是首先对私有成员重新排序,以便按初始化顺序列出它们:

private:
QString n;
QFile namefile;
QTextStream file;
QString name;
然后在类构造函数的初始化列表中初始化它们:

MyClass::MyClass()
   :n("name.txt")
   ,namefile(n)
   ,file(&namefile)
{
   if (!namefile.open(QIODevice::ReadOnly))
   {
      return;
   }

   name = file.readLine();

   // Rest of your code goes here.
}
实现这一点还有其他方法,但我将把它留给你们去研究我上面的建议。

只要改变就行了

file.setDevice(&namefile);

谢天谢地,直到最近几周我才开始做很多面向对象的编程。我的老师现在正在教C。但是我们有一个竞争即将到来,所以我认为最好使用GUI。在java之前不会学习面向对象。所以,谢谢你的建议。它编译得很好,但后来告诉我,由于分段错误,程序预期会退出?@JustinRolf调试器说什么?@JustinRolf尝试进行完全重建