Проблема в том, что вы пытаетесь неявно преобразовать объект B в объект A. Учитывая, что они предназначены для разделения классов, компилятор не сможет это сделать. Хотя возможно явное приведение указателя или ссылки на объект B к * / & объекта A, это может привести к путанице в компиляторе и является действительно плохой идеей.
Как будто вы просите компилятор преобразовать яблоко в апельсин, не может быть сделано. Если бы B был подклассом A, это было бы вполне возможно. Но вы не можете просто сделать это как обходной путь, если два класса не имеют ничего или мало общего. Однако, если они это делают, и у вас есть несколько связанных классов, создайте базовый класс (содержащий общие методы) и сделайте все эти классы производными от него.
И снова, пожалуйста, не делайте что-то вроде (A*)(&b)
, потому что это приведет к проблемам во время выполнения, если вы не знаете, какой класс вы фактически получаете в параметре foo () (опять же, если B не выводит из а).
Конечно, лучший способ действий - перегрузить Foo ().
РЕДАКТИРОВАТЬ: вы видите, вы можете преобразовать из A в B в конструкторе B. Но вам нужен A и B, поэтому необходимо ОБРАТНОЕ преобразование. Вот почему ваш текущий код не будет работать.