2017-05-10 58 views
0

我正在嘗試創建一個函數數組,以便稍後可以使用它循環顯示在用戶界面上的按鈕數量。無法創建函數陣列

這裏是我的.HPP片段:

public slots: 
    void coin5C(); 
    void coin10C(); 
    void coin20C(); 
    void coin50C(); 
    void coin1EUR(); 
    void (connections[5])() = { coin5C, coin10C, coin20C, coin50C, coin1EUR }; 

最後一行應該把他們都在一個數組,但我似乎得到一個錯誤

Declaration of 'connections' as array of functions

在我的.cpp這是我想要如何使用我的陣列功能(最後一行):

for(int i = 0; i < NumButtons; i++) { 

     // Error checking 
     if(btnNames[i] == "") { 
      btnNames[i] = "btnNames " + QString::number(i); 
     } 

     buttons[i] = new QPushButton(btnNames[i]); 
     layout1->addWidget(buttons[i]); 

     connect(buttons[i], SIGNAL(released()), this, SLOT(connections[i]())); 

    } 

如果我使用void (*connections[5])() = { coin5C, coin10C, coin20C, coin50C, coin1EUR };我得到的錯誤:

cannot convert 'MainWindow::coin5C' from type 'void (MainWindow::)()' to type 'void (*)()' 
void (*connections[5])() = { coin5C, coin10C, coin20C, coin50C, coin1EUR }; 

我在做什麼錯?

謝謝。

+0

幫助閱讀:[指向成員函數(https://isocpp.org/wiki/faq/pointers-to-members) – user4581301

+1

'插槽:'不是標準C++的一部分,您使用的東西像QT? (如果是這樣,那麼將問題標記爲QT會有所幫助) –

回答

1
void (*connections[5])() = { coin5C, coin10C, coin20C, coin50C, coin1EUR }; 

聲明瞭一個函數指針數組。你想要一組成員函數指針。嘗試這樣的:

void (MainWindow::*connections[5])() = { &MainWindow::coin5C, &MainWindow::coin10C, &MainWindow::coin20C, &MainWindow::coin50C, &MainWindow::coin1EUR }; 
1

除了做一個方法指針數組,你也想把它放在類的主體。如果您將數組聲明爲static constexpr,則此方法有效。看下面的示例程序。它還定義了類型AMethod,它只是指向A方法的指針,使代碼更清晰一些。

#include <iostream> 

struct A 
{ 
    typedef void(A::*AMethod)(); 
    void a(){ std::cout << __FUNCTION__ << std::endl; } 
    void b(){ std::cout << __FUNCTION__ << std::endl; } 
    constexpr static AMethod ptrs[2] = {&A::a, &A::b}; 
}; 


int main() 
{ 
    A a; 
    (a.*A::ptrs[0])(); 
    (a.*A::ptrs[1])(); 
}