«If (size == list [i])», помеченный красным цветом на «==», говорит No operator "==" matches these operands
operand types are: int == InventoryRecord
, Я не вижу, что я делаю не так здесь. Может кто-нибудь объяснить мне, почему это?
void linear_search(InventoryRecord list[], int size) {
int i;
cout << "\nEnter Element to Search : ";
cin >> size;
/* for : Check elements one by one - Linear */
for (i = 0; i < MAX_SIZE; i++) {
/* If for Check element found or not */
if (size == list[i]) {
cout << "\nLinear Search : Element : " << size << " : Found : Position : " << i + 1 << ".\n";
break;
}
}
if (i == MAX_SIZE)
cout << "\nSearch Element : " << size << " : Not Found \n";
}
list [i] — это i-й элемент в массиве элементов с типом InventoryRecord. Это не размер InventoryRecord или размер объекта, который может содержаться в InventoryRecord. Если InventoryRecord является классом, то он может иметь доступный метод или член, который возвращает или содержит размер.
size == list[i].size;
или же
size == list[i].size();
В качестве альтернативы, если InventoryRecord является классом, вы можете добавить оператор ==, который возвращает размер. Тем не менее, я подозреваю, что это не то, что вы хотите. Ожидается, что оператор == будет сравнивать содержимое, встроенное в InventoryRecord, а не размер содержимого.
Ожидание будет таким …
3 == list[i];
будет проверять, был ли элемент, встроенный в InventoryRecord, равен 3. Не то, чтобы вложенный элемент имел размер 3.
В этом случае компилятор не знает, как сравнивать эти типы. Вы можете перегрузить оператор == для класса InventoryRecord.
bool operator==(const size_t& size) const {
// Compare
// As example return m_size == size;
}