Вы не можете перегружать операторы в C ++, если один из аргументов не относится к типу класса (или оператор не является шаблоном).Это имеет смысл, потому что в противном случае вы можете сделать Сумасшедшие вещи, например, переопределить встроенный оператор + для целых чисел, чтобы выполнить вычитание:
int operator+ (int lhs, int rhs) { // Not legal
return lhs - rhs; // Whoops!
}
В случае того, что вы делаете, вы пытаетесь переопределитьчто означает operator =
для массивов, что недопустимо.Более того, это не очень хорошая идея, потому что, если бы она была успешной, это нарушило бы принцип наименьшего сюрприза, так как вы могли бы сделать такой код, который обычно незаконен, внезапно скомпилировать:
string array[10][10], string array2[10][10];
array = array2; // Problem; this isn't legal C++ code!
Если вы хотитеПоддерживая глубокое копирование массива, вам нужно написать собственную функцию для этого, которая не является перегруженным оператором присваивания.В качестве альтернативы, и, возможно, гораздо более удачной идеи, вам следует рассмотреть обертывание массивов либо в классе, либо в структуре.Затем вы можете перегрузить operator =
на этот класс или структуру, чтобы сделать глубокое копирование.Кроме того, вы получите дополнительное преимущество, заключающееся в том, что вы можете запретить пользователям доступ к массивам с недопустимыми индексами, поскольку вы можете определить методы получения и установки, которые будут проверять индекс.
Надеюсь, это поможет!