Во-первых, как вы собираетесь работать с классом AMainJoin, если о нем ничего не известно? Если честно, то не понятно как это вообще реализуется. Во-вторых, какая необходимость объявлять два класса с одинаковым именем? В третьих,
Обратится к виртуальной функции AMainJoin и при этом вызвать код AMainJoin
тут какая-то опечатка.