I have a class called CoffeeShop and another class called user. i want to pass a function from the class CoffeeShop to the user class but i have an error, what i tried to do is
User class:
class user {
public:
    function<void (string)> fun;
    string name;
    void order_coffee() {
        fun(name);
    }
};
then the coffeeshop class
class CoffeeShop {
public:
    mutex mtx;
    void Make_Coffee(string name) {
        cout << "in queue: " << name << endl;
        unique_lock<mutex> lock(mtx);
        cout << "welcome,order in process, " << name << endl;
        this_thread::sleep_for(chrono::seconds(4));
        cout << "good bye, " << name << endl;
        lock.unlock();
    }
    void assign() {
        user a;
        a.fun = CoffeeShop::Make_Coffee;
        a.name = "amr kamal";
        thread th1(&user::order_coffee, a);
        user b;
        b.fun = a.fun;
        b.name = "hadeer";
        thread th2(&user::order_coffee, b);
        th2.join();
        th1.join();
    }
};
I use the function assigned to start running the function, what i want to do is to let the users use the make_coffee function and wait in the queue and it process 1 by 1, i want to be able to let the users access the function.
i use the class as following in the main
int main() {
   CoffeeShop coffeeShop;
   coffeeShop.assign();
}
the Error i got is on assign the user make_coffee function
error C2679: binary '=': no operator found which takes a right-hand operand of type 'void (__cdecl CoffeeShop::* )(std::string)' (or there is no acceptable conversion)
 
    