Passing a single class instance to another class

When an object contains objects you have to provide any necessary arguments to those object's constructors in the parent constructor. Since you didn't define a constructor for Puzzle there was no way to provide Box with the required constructor argument.

Add this to Puzzle:
public: Puzzle() : _box(_debug) {};

You tried to do it in Puzzle::setup() but by then it was too late. The Box object has to be constructed when the Puzzle is constructed.