класс — назначение C ++ между различными типами объектов

У меня есть несколько классов объединения (union_a, union_b, …), все с одинаковыми членами данных и
различные функции-члены.
Я хочу иметь возможность назначить объект любого класса для объекта любого другого класса, и
используйте его в любом ctor для init.
«Рабочий» union union_z используется в качестве посредника.
Все отлично работает в ВК.
В GC последняя строка получает «ошибка: запрошено преобразование из« union_a »в нескалярный тип« union_b »».

Помоги мне, если сможешь, я …

union union_z{int m;};

union union_a{
int  m;

union_a(){}
union_a(union_z x){m = x.m;}

void operator=(union_z x){m = x.m;}
operator union_z(){return *(union_z *)this;}
};

union union_b{
int  m;

union_b(){}
union_b(union_z x){m = x.m;}

void operator=(union_z x){m = x.m;}
operator union_z(){return *(union_z *)this;}
};

union_a  a;
union_b  b(a);
b = a;
union_b  b1 = a; //error: conversion from ‘union_a’ to non-scalar type ‘union_b’ requested

1

Решение

G ++ это правильно. Формальный синтаксис инициализации копии заключается в
преобразовать выражение справа от = к цели
введите, а затем скопируйте его. Что в этом случае предполагает неявное
преобразование из union_a в union_b, И нет ни одного;
единственное преобразование потребует двух определенных пользователем преобразований,
и два пользовательских преобразования никогда не могут быть использованы в
неявное преобразование.

См. §8.5 / 16 и §13.3.1.4 (C ++ 11, но правила, предусматривающие это
не изменились в отношении более ранних версий).

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru