Я полностью поддерживаю GMan и sbk, которые сказали вам использовать именованную функцию вместо оператора. Вопреки распространенному мнению, перегрузка операторов всегда почти неправильна, потому что она почти никогда не добавляет ясности к коду. Есть удивительно мало исключений. Среди них есть операторы ввода и вывода потока, а также арифметические операторы, если вы реализуете числовой тип. (И насколько вероятно, что за пределами книги, обучающей вас перегрузке операторов?) Обратите внимание, что некоторые люди недовольны перегрузкой std lib +
(и +=
, конечно) для std::string
по той же причине (и другим , например, a+b==b+a
верно для чисел, но не для строк) - и IMO у них есть точка.
В любом случае, если кто-то хотел сделать это, несмотря на все советы:
Когда вы пытаетесь вызвать оператор, компилятор пытается найти его в пространстве имен, которое он вызывал в , во всех включающих пространствах имен и пространствах имен всех аргументов . (Последнее называется поиском, зависящим от аргумента, или поиском Кенига.) Пространство имен аргумента - std
, к которому нельзя добавлять перегрузку. Таким образом, из пространства имен оператор вызывается в и его включающих пространства имен - включая глобальное пространство имен , в которое входят все остальные - для помещения оператора.
Поэтому, если вы хотите реализовать его, несмотря на все предупреждения, поместите его в пространство имен, в котором оно используется. Если оно используется в нескольких пространствах имен, поместите его в то, которое охватывает все это. Если это глобальное пространство имен, пусть будет так.
О, и я упоминал, что вы должны не реализовать это как перегруженный оператор?