Если у вас есть классы с одинаковыми именами, то, вероятно, у вас плохой дизайн. Как вы ожидаете, что ваш код скажет, что есть что? Если вам придется использовать их обоих, вы обречены. Если это наименование имеет смысл в разных контекстах, вы должны поместить свои классы в отдельные пространства имен. C ++ будет включать имя пространства имен, когда символы класса будут искажены, поэтому с этим у вас не будет никакого конфликта.