У меня есть следующий код:
#include <iostream>
#include <vector>
#include <functional>
using namespace std;
using namespace std::placeholders;
typedef std::vector<std::function<void(void)>> func_list;
class Thing {
private:
func_list flist;
void _sayHi() {
cout << "hi" << endl;
}
void _sayNum(int num) {
cout << num << endl;
}
public:
Thing();
void sayHi();
void sayNum(int num);
void executeFunctions();
};
void Thing::sayHi() {
flist.push_back(
std::bind(&Thing::_sayHi, this) // Unsure of the correct usage here
);
}
void Thing::sayNum(int num) {
flist.push_back(
std::bind(&Thing::_sayNum, this, num) // Unsure of the correct usage here
);
}
void Thing::executeFunctions() {
for (unsigned int i = 0; i < flist.size(); i++) {
flist.at(i)();
}
}
int main() {
Thing thing = Thing();
thing.sayHi();
thing.sayNum(5);
thing.executeFunctions();
}
Моя цель - просто хранить функции, когда они вызываются, чтобы их можно было выполнить позже. Я могу связать функции, не являющиеся членами, с помощью std::bind(&functionName, param1, param2)
, но внутри функции это больше не работает, и использование std::bind(&Class::ClassMemberFunctionName, this)
оставляет меня с ошибкой unresolved externals
:
Ошибка 1 error LNK2019: неразрешенный внешний символ public: __thiscall Thing::Thing(void) (??0Thing@@QAE@XZ), на который ссылается функция _main
Ошибка 2 ошибка LNK1120: 1 неразрешенный внешний
Как правильно связать функции этого класса?