Имя операторной функции содержит ключевое слово operator
, и ваш конкретный оператор является свободной функцией, поэтому квалифицированный вызов будет:
WinFile::operator+=(s1, s2);
Я не уверен, что в любом случае это звуковой дизайн, вы (пытаетесь) расширить интерфейс std::stack
, добавив функции, которые не определены в том же пространстве имен типа - это как-то против принцип интерфейса и, более того, вы добавляете операторы ... которые громоздки в использовании, если вы не вызываете их из того же пространства имен, в котором они определены (или они вводятся в область действия с помощью объявления using), или они определено в том же пространстве имен, где определен тип (поэтому ADL будет их подбирать). Вероятно, лучше избегать обоих или, по крайней мере, предоставлять реальное имя функции.
По определению самого оператора семантика странная : если оба стека эквивалентны, то вы ничего не делаете, а если они разные, вы перемещаете все содержимое второго стека в первый ... а затем также вернуть копию! Это, вероятно, вызовет сюрпризы в будущем. Если вы хотели проверить, ссылаются ли они на один и тот же объект, поскольку второй аргумент является копией, это будет невозможно (т. Е. Вызывающая сторона не может предоставить ссылку на копию)