In your case, since you have already provided a constructor that takes one parameter SomeController*, compiler doesn't provide any default constructor for you. Hence, default constructor is not available.
ie,
MyInterface a;
will cause compiler to say no appropriate constructor.
If you want to make constructor explicitly not available then make the same as private.
EDIT for the code you have posted:
You need to call base class MyInterface constructor (with single parameter) explicitly. Otherwise, by default the derived class constructor ( Inherited) will look for Base class default constructor which is missing.
class Inherited : public MyInterface
{
private:
Inherited ();
public:
Inherited(SomeController *controller):MyInterface(controller)
{}
};