无法创建函数数组

时间:2017-05-10 20:55:11

标签: c++ qt

我正在尝试创建一个函数数组,以便稍后使用它来循环显示用户界面上的按钮数量。

这是我的.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 };

我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:1)

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

声明一个函数指针数组。您需要一个成员函数指针数组。尝试这样的事情:

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

答案 1 :(得分: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])();
}