如何在另一个函数中使用这些变量

How to use these variable in another function?

本文关键字:变量 另一个 函数      更新时间:2023-10-16

尝试在同一文件中的另一个函数中使用变量,我快把自己逼疯了:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    QLineEdit * street1BetSize = new QLineEdit("0"); // want to use these QLineEdit's
    QLineEdit * street2BetSize = new QLineEdit("0");
    QLineEdit * street3BetSize = new QLineEdit("0");
    QLineEdit * street4BetSize = new QLineEdit("0");
    QLineEdit * street5BetSize = new QLineEdit("0");

}

想在这里使用这些变量:

void MainWindow::runButtonClicked()
{
    QVector<card> vDealt = cardDeck.deal_rand_cards(vDeck,3);
    //qDebug()<<vStreetBets[0];
    streetBetsList << street1BetSize << street2BetSize << street3BetSize << street4BetSize << street5BetSize;
    QVector<int> vStreetBets;
    for(int i=0;i<5;i++)
    {
         vStreetBets.append(streetBetsList[i]->text().toInt());
         qDebug()<<"street bet: "<<vStreetBets[i];
    }
}

因为它在这里,我得到

警告:C4189:'street5BetSize':局部变量初始化但未被引用

error: C2065: 'street5BetSize' : undeclared identifier

我尝试将extern QLineEdit * street1BetSize;添加到mainwindow.h,但这给了我一个"未解决的外部"错误。

street1BetSize to street5BetSize中的变量是MainWindow构造函数中的局部变量,它们对其他函数不可见。为了使其他类成员函数能够访问它们,您可以将它们提升为MainWindow类成员,以便在类之间共享变量状态。而不是许多变量指针,使用std::vector的QLineEdit对象应该是一个更好的解决方案?

class MainWindow
{
public:
   MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    streetBetSizes(5,QLineEdit("0"))
private:
   // other member
   std::vector<QLineEdit> streetBetSizes;
};

如果每个MainWindow对应5个QLineEdit,那么您希望它们成为您的类的成员。只需将它们添加到您的类定义中:

class MainWindow
{
  // ...
 private:
  // ...
  QLineEdit* street1BetSize;
  QLineEdit* street2BetSize;
  QLineEdit* street3BetSize;
  QLineEdit* street4BetSize;
  QLineEdit* street5BetSize;
}
现在,每个MainWindow对象将有5个指向QLineEdit的指针。它们构成了该对象状态的一部分,并且可以被它的任何成员函数访问。现在将构造函数更改为以下内容,这样就不用重新定义名称了:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    street1BetSize = new QLineEdit("0");
    street2BetSize = new QLineEdit("0");
    street3BetSize = new QLineEdit("0");
    street4BetSize = new QLineEdit("0");
    street5BetSize = new QLineEdit("0");
}

实际上,您最好使用成员初始化列表,就像您对QMainWindowui所做的那样:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent), ui(new Ui::MainWindow),
    street1BetSize(new QLineEdit("0")), street2BetSize(new QLineEdit("0")),
    street3BetSize(new QLineEdit("0")), street4BetSize(new QLineEdit("0")),
    street5BetSize(new QLineEdit("0"))
{ }

现在你的构造函数不需要做任何工作。

现在可以在MainWindow的其他成员函数中引用street1BetSize和友元。但是,当您有编号的变量(如streetXBetSize)时,这总是非常可疑的。这似乎是一个数组或容器的好地方。为什么不尝试std::vector<QLineEdit>,然后您可以根据需要添加和删除QLineEdit s。你的类定义现在有:

class MainWindow
{
  // ...
 private:
  // ...
  std::vector<QLineEdit> streetBetSizes;
}

构造函数现在可以简单地做:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent), ui(new Ui::MainWindow)
{
  for (int i = 0; i < 5; i++) {
    streetBetSizes.push_back(new QLineEdit("0"));
  }
}

将变量声明为MainWindow的成员,然后在构造函数中初始化它们:

class MainWindow : public QMainWindow
{
    ...
private:
    QLineEdit* m_street1BetSize;
    QLineEdit* m_street2BetSize;
    QLineEdit* m_street3BetSize;
    QLineEdit* m_street4BetSize;
    QLineEdit* m_street5BetSize;
};
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    m_street1BetSize = new QLineEdit("0"); // want to use these QLineEdit's
    m_street2BetSize = new QLineEdit("0");
    m_street3BetSize = new QLineEdit("0");
    m_street4BetSize = new QLineEdit("0");
    m_street5BetSize = new QLineEdit("0");
}
相关文章: