Вы близки, вы можете объявить класс в пространстве имен и затем определить его снаружи, если хотите:
namespace ns {
class A; // just tell the compiler to expect a class def
}
class ns::A {
// define here
};
То, что вы не можете сделать, это определить класс в пространстве имен без членов, а затем снова определить класс вне пространства имен. Это нарушает Правило Единого Определения (или некоторую глупость).