Когда вы указываете конструктор не по умолчанию без указания конструктора по умолчанию, конструктор по умолчанию не существует.
Вы не пытаетесь вызвать конструктор по умолчанию, пока не попытаетесь вызвать его явно, как в TestClass2. Если бы вы вместо этого в TestClass2 указали конструктор, который соответствующим образом инициализировал TestClass, у вас не было бы ошибки.
т.е.
class TestClass2
{
TestClass m_testClass;
public:
TestClass2():m_testClass(2){}
};
также по возможности используйте списки инициализаторов для производительности, и если вы называете имя параметра и имя переменной-члена одинаковыми, это может сбить с толку других.