#c #unreal-engine4 #unreal-blueprint
Вопрос:
В BP есть функция, которая ищет пустое место в массиве и заполняет его. При попытке переписать его на c он выдает ошибку C2678 «двоичный»==»: оператор, принимающий левый операнд типа «const FSlotStructure», не найден (или нет приемлемого преобразования)» Переменные на рисунке соответствуют переменным в коде. Функция Find() сама по себе не выполняет поиск переменной FSlotStructure в массиве инвентаризации массива. В чем же заключается ошибка?
Приведенная ниже функция является пользовательской, поскольку функции «НАЙТИ» и «Установить» из библиотеки UKismetArrayLibrary и не могут использоваться напрямую.
void UInventoryComponent::CreateStack(FSlotStructureamp; ContentToAdd) { //TArraylt;FSlotStructuregt; Inventory; int32 Index; for (autoamp; SlotStructure : Inventory) { int32 NewIndex = Inventory.Find(SlotStructure, Index); Inventory.Insert(ContentToAdd, NewIndex); } }
Комментарии:
1. Петля выглядит странно. Для каждого элемента, в
Inventory
который вы добавляете элементInventory
? Это нарочно?2. Ошибка кажется вполне очевидной. Вы делаете
find
что-то , и чтобы найти что-то, вам нужно уметь сопоставлять это. Но если для типа не определен оператор сравнения равных, вы не можете увидеть, соответствует ли он, верно?3. Точно, потому что в BP все работает, кроме инвентаризации. Поиск(Структура слота, индекс) сам по себе также выдает ошибку C2678. Верно, но что именно? Мне нужно найти индекс элемента в массиве и поместить его в переменную. Логично, что цикл делает это. Но что и с чем следует сравнивать в конце концов?
4. Это
FSlotStructure
встроенный, он создан BP или это ваше собственное творение?5. Владеть в BP и в c
Ответ №1:
Все было решено, по крайней мере, код компилируется без ошибок. Все, что мне нужно было сделать, это добавить его в структуру FSLOT
operator bool() const { return true; }