Нет оператора & quot; == & quot; соответствует этим операндам. Типы операндов: int == type_name`

«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";
}

-1

Решение

list [i] — это i-й элемент в массиве элементов с типом InventoryRecord. Это не размер InventoryRecord или размер объекта, который может содержаться в InventoryRecord. Если InventoryRecord является классом, то он может иметь доступный метод или член, который возвращает или содержит размер.

size == list[i].size;

или же

size == list[i].size();

В качестве альтернативы, если InventoryRecord является классом, вы можете добавить оператор ==, который возвращает размер. Тем не менее, я подозреваю, что это не то, что вы хотите. Ожидается, что оператор == будет сравнивать содержимое, встроенное в InventoryRecord, а не размер содержимого.

Ожидание будет таким …

3 == list[i];

будет проверять, был ли элемент, встроенный в InventoryRecord, равен 3. Не то, чтобы вложенный элемент имел размер 3.

0

Другие решения

В этом случае компилятор не знает, как сравнивать эти типы. Вы можете перегрузить оператор == для класса InventoryRecord.

bool operator==(const size_t& size) const  {
// Compare
// As example return m_size == size;
}
0

По вопросам рекламы [email protected]