The issue is that you’ve defined two default constructors, which causes ambiguity when you try to do something that requires a default constructor. In the latter case, there’s no ambiguity because you’re not calling a default constructor.
To your last question, Derived() is a default constructor that takes no parameters and passes 0 to the base constructor. Derived(double db=0) is also a default constructor that can accept one optional parameter, and passes that value to the base constructor.