Как вы уже отметили, set(source);
является источником (не предназначен для каламбур) проблемы. Это не совсем то, что вы думаете, это не попытка вызвать копию ctor. Вместо этого он в основном эквивалентен: set source;
- т. Е. Он пытается определить объект set
с именем source
- круглые скобки являются избыточными, но разрешены.
Вы можете вызвать копию ctor в ctor (или примерно в любом месте, где захотите), но это не будет так, как вы хотите, - копия ctor создает копию, поэтому, даже если вы ее вызывали, просто создаст временный объект, который испарится в конце этого утверждения.
Как уже упоминалось, то, что вы, вероятно, хотите, является частной функцией для копирования данных с одного объекта на другой, а затем используйте это как из вашей копии ctor, так и для оператора копирования. Еще лучше определите его, используя объекты, которые можно корректно обрабатывать по умолчанию ctor и операторы присваивания копий.
линия 33 является линией: набор (источник); – Ring