Я перегрузил оператор индекса строки ([]). Я заставляю его возвращать целое число, поскольку я не буду использовать его для каких-либо целей назначения. Однако я не могу использовать оператор сравнения сейчас!
Вот код
class Set
{
public:
virtual int operator[](int i) = 0;
virtual int size() = 0;
void union_operation(Set* second);
void interesction_operation(Set* second);
};
void Set::union_operation(Set* second)
{
int second_size = second->size();
for(int i=0;i<second_size;i++)
{
for(int j=0;j<this->size();j++)
{
//The line below doesnt work!
if(this[j]==second[i])
{
break;
}
}
}
}
Реализация перегрузки оператора выполняется в производном классе.
Так как перегруженный оператор возвращает целое число, поэтому сравнение выполняется между двумя целыми числами, что совершенно справедливо. Почему эта строка все еще дает ошибку?
В C++ this
указатель, который требует разыменования, прежде чем вы сможете его использовать. Если вы, конечно, не передаете его функции.
Итак, для того, чтобы ваше сравнение работало, оно должно выглядеть следующим образом:
if((*this)[j] == (*second)[i])
{
break;
}
EDIT: second
также является указателем Set
поэтому вы должны разыгрывать его, чтобы использовать его.
(*this)[j]==(*second)[i]
PS: Вы должны взять этот параметр по ссылке