2012-12-29 29 views
1

我駕駛自己瘋狂的在同一個文件試圖在另一個函數中使用變量:如何在另一個函數中使用這些變量?

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 

我嘗試在mainwindow.h中添加extern QLineEdit * street1BetSize;,但是這給了我一個「無法解析的外部」錯誤。

+0

,你選擇了一個很好的C++的書,研究它,並宣讀了Qt的例子/教程。這些變量應該定義爲類成員 - 如果你不知道如何去做,你還沒有足夠的基本C++知識。 – Mat

回答

0

如果你將有五個QLineEdit S代表每個MainWindow,那麼你想他們是你的類的成員。只需將它們添加到您的類定義:

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")) 
{ } 

而現在你的構造函數不需要做任何工作。

現在您可以參考street1BetSizeMainWindow其他成員函數中的朋友。但是,如果變量編號爲streetXBetSize,則始終是非常可疑的。這似乎是一個數組或容器的好地方。爲什麼不嘗試std::vector<QLineEdit>,然後您可以根據需要添加和刪除QLineEdit。您的類定義現在將有:

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")); 
    } 
} 
0

聲明變量作爲主窗口的成員,然後就初始化它們在構造函數:

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"); 
} 

然後你就可以在主窗口的任何方法使用它們。

1

street1BetSize to street5BetSize的變量是MainWindow構造函數中的局部變量,它們對其他函數不可見。要使其他類成員函數能夠訪問它們,可以將它們提升爲MainWindow類成員,這樣變量狀態就可以在類中共享。而不是許多變量指針,使用QLineEdit對象的std::vector應該是一個更好的解決方案?

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