Первая ошибка связана с тем, что, как было сказано, вы возвращаете ссылку на локальную переменную. Рассматривайте ссылку как указатель внизу. То, что вы делаете, хранит ссылку на локальную переменную, что означает переменную в стеке, которая после unionOfIntegerSets
заканчивает и умирает . Таким образом, компилятор оказывает вам большую услугу, говоря вам не делать этого.
Если у вас есть промежуточные результаты, эти результаты необходимо скопировать, что означает, что возвращаемое значение должно быть типа IntegerSet
, а не IntegerSet &
Ваша вторая ошибка в том, что у вас есть другие функции с таким же именем, и вы вызываете их откуда-то еще. Тип аргумента, который вы передаете при вызове функции, может быть приведен как минимум к двум перегрузкам функции, и поэтому компилятор не может понять, какую из двух (или более) функций вы действительно имеете в виду. Поскольку вы не дали никакого кода, я приведу пример:
int func(short int a);
int func(int a);
Теперь, если вы позвоните:
char c = 'c';
int res = func(c);
C ++ может привести char
к обоим short int
и int
и поэтому не может понять, какой из двух func
вы хотите вызвать.
Если вы предоставите больше кода, я мог бы помочь вам лучше определить его.