Unsolved Arrays of functions help
-
@VRonin Nope, that just give a lot more errors.
-
I tried it and it works. did you forget to
#include <functional>
? -
@VRonin Yes i included that.
I get the error
'function' is not a member of 'std' std::function<void()> functions[10];
^ -
try this code:
#include <functional> #include <QDebug> class MyClass{ public: MyClass()=default; void on_pushButton_clicked() { std::array<std::function<void()>,10> functions; for(int i = 0; i < 10; i++) functions[i] = std::bind( &MyClass::readMe,this); for(int i = 0; i < 10; i++) functions[i](); } void readMe() { qDebug() << "I got read"; } }; int main() { MyClass tempClass; tempClass.on_pushButton_clicked(); return 0; }
It works for me... Make sure your pro file contains:
CONFIG += c++11
and re-run qmake
EDIT:
@Wieland is correct,std::array
is preferable
There is so much C++11 here I'm having an overdose! -
Hi! Or use a lambda:
void MainWindow::sayHi() { qDebug() << "Hi!"; } void MainWindow::on_pushButton_clicked() { auto const count{10}; std::array<std::function<void()>,count> myArray; for (auto &i : myArray) { i = [=]() { this->sayHi(); }; } }
-
@VRonin said in Arrays of functions help:
CONFIG += c++11
I am using QTCreator 5.5.1 and still get the same error. not a member of std with both function and bind.
Also with g++ it i get the same error.
-
In Qt Creator click on build->run qmake after you put
CONFIG += c++11
in your .pro file -
@VRonin yes I have done that several times.
-
let's go C++11 mental!
try this code in your main.cpp commenting out all the rest that's already there and tell me if it works and if not what does it complain about
#include <functional> #include <array> #include <QDebug> class MyClass{ public: void on_pushButton_clicked() { std::array<std::function<void()>,10> functions; std::fill(std::begin(functions),std::end(functions),std::bind( &MyClass::readMe,this)); for(const auto& i : functions) i(); } void readMe() { qDebug() << "I got read"; } }; int main() { MyClass tempClass; tempClass.on_pushButton_clicked(); return 0; }
-
This is the C++98 version of the code above
#include <QDebug> class MyClass{ public: void on_pushButton_clicked() { void (MyClass::*functions[10])() ; for(int i = 0; i < 10; ++i) functions[i] = &MyClass::readMe; for(int i = 0; i < 10; ++i) (this->*functions[i])(); } void readMe() { qDebug() << "I got read"; } }; int main(int argc, char **argv) { MyClass tempClass; tempClass.on_pushButton_clicked(); return 0; }
-
@VRonin This is so retro, i want to watch Miami Vice on VHS now :-D
-
@Wieland Starwars on Super 8mm ;)
@bwcal1999 What Qt version, compiler (including version), OS are you using ?
-
@VRonin said in Arrays of functions help:
void (MyClass::*functions[10])() ;
I hope you acknowledge most of us dinosaurs will typedef that. We are not masochists, only old-fashioned. ;)
-
@VRonin said in Arrays of functions help:
let's go C++11 mental!
Okay :-)
void MainWindow::on_pushButton_clicked() { std::array<std::function<void()>, 10> f; std::fill(std::begin(f), std::end(f), [=](){this->sayHi();}); std::for_each(std::begin(f), std::end(f), [](auto &i){i();}); }