UE4 C++ 结构体数组使用AddUnique方法添加元素报错

2023-11-08

当使用TArray的AddUnique方法给结构体数组添加元素时,如果结构体没有重写==操作符时就会报错,那么为什么会报这个错呢?

因为AddUnique方法在添加元素前会将传入的元素在数组内搜索一遍,也就是Find()函数,在Find函数内部用到了==操作符,但是结构体是自定义的数据类型,所以必须重写==操作符才不会报错。

示例:

.h
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "TestActors.generated.h"

UENUM(BlueprintType)
enum class EOrient : uint8
{
	North,
	East,
	South,
	West,
};

USTRUCT(BlueprintType)
struct FATestActor
{
	GENERATED_USTRUCT_BODY()

public:

	UPROPERTY(EditAnyWhere, BlueprintReadWrite)
		FString str;
	UPROPERTY(EditAnyWhere, BlueprintReadWrite)
		EOrient orient;
	UPROPERTY(EditAnyWhere, BlueprintReadWrite)
		float a;
	bool operator==(const FATestActor& ATestActor) const
	{
		return str == ATestActor.str && orient == ATestActor.orient && a == ATestActor.a;
	}
};

UCLASS()
class TESTACTOR_API ATestActors : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	ATestActors();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

public:
	UPROPERTY(EditAnyWhere, BlueprintReadWrite)
		TArray<FATestActor> testArrayStruct;	
};
.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "TestActors.h"

// Sets default values
ATestActors::ATestActors()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;
}

// Called when the game starts or when spawned
void ATestActors::BeginPlay()
{
	//给自定义结构体的数组添加不重复内容
	FATestActor testActor;
	testActor.str = UTF8_TO_TCHAR("小明");
	testActor.orient = EOrient::East;
	testActor.a = 1.0f;

	FATestActor testActor1;
	testActor1.str = L"小红";
	testActor1.orient = EOrient::East;
	testActor1.a = 1.0f;

	testArrayStruct.AddUnique(testActor);
	testArrayStruct.AddUnique(testActor1);

	Super::BeginPlay();
}

// Called every frame
void ATestActors::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UE4 C++ 结构体数组使用AddUnique方法添加元素报错 的相关文章

  • java学习之_Spring框架01_IoC控制反转和DI依赖注入

    spring架构 Spring 最初的目标就是要整合一切优秀资源 然后对外提供一个统一的服务 Spring 模块构建在核心容器之上 核心容器定义了创建 配置和管理 bean 的方式 bean可以看成是一个黑盒子 即只需要知道其功能而不必知道
  • CustomEditor CustomPropertyDrawer

    CustomEditor typeof Type 这是所有写过编辑器的人非常熟悉的一行代码 因为它是编辑器的入口 但是 CustomPropertyDrawer typeof Type 恐怕就没几个人知道了 它和CustomEditor功能

随机推荐

  • 如何分析FPGA的片上资源使用情况

    如何分析FPGA的片上资源使用情况 在维护遗留代码 4 时序问题初露端倪这篇文章中 我提到 第三方开发的设计中 组合逻辑与时序逻辑的比例为2 6 1 这是造成该设计时序收敛困难的原因之一 mengyudn朋友很热心 对这个数据的来历产生了疑
  • 神经网络笔记

    神经网络 一 什么是神经网络 是基于生物学中神经网络的基本原理 在理解和抽象了人脑结构和外界刺激响应机制后 以网络拓扑知识为理论基础 模拟人脑的神经系统对复杂信息的处理机制的一种数学模型 二 神经网络的基本特性 1 非线性 非线性关系是自然
  • jsp自定义标签库

    标签的概念 标签 标签是一种XML元素 通过标签可以使JSP网页变得简洁并且易于维护 还可以方便地实现同一个JSP文件支持多种语言版本 由于标签是XML元素 所以它的名称和属性都是大小写敏感的 标签处理类 标签处理类似是Java类 这个类继
  • 绘图工具(代码实现绘图)---plantuml

    基础入门第一个例子 时序图 流程图 源代码 图片展示 还有很多这里不再介绍 最近看到asciidoc和plantuml 是编写文档的极好工具 相对word和visio 最大的好处是可以实现代码版本管理 作为changelist asciid
  • eclipse运行,提示错误:The selection cannot be launched,and there are no recent launch

    错误原因 1 代码编辑错误 重点检查 main的拼写 String args 的拼写 类名后有没有空格 的书写等 2 没有定义类 需要先添加类 在文件中书写 如下 先新建Hello world类 再在生成的文件中书写代码 运行 就能得到正确
  • 没有与参数列表匹配的构造函数_C++构造函数和初始化表

    构造函数和初始化表 1 构造函数 当类对象被创建时 编译系统对象分配内存空间 并自动调用该构造函数 由构造函数完成成员的初始化工作 因此构造函数的作用是初始化对象的数据成员 2 构造函数可以重载 构造函数通过参数表的差别化可以形成重载 创建
  • 移动开发学习第二课学习记录

    图片资源 图片资源有 png jpg gif 9 png等文件 图片资源分类 应用图标资源村房子啊mipmap文件中 界面中使用的图片资源 存放在drawable文件夹中 一般不采用花哨的配色 除了个别的活动主题外 一般以浅色暖色为主 调用
  • Kioptrix: Level 2靶机实战 sql注入万能密码到后台 命令执行;getshell 内核漏洞9542 提权

    Kioptrix Level 1靶机实战 前言 0x01 信息收集 1 1 探测靶机ip 1 2 nmap探测端口 0x02 漏洞探测 2 1 访问首页 80端口 2 1 1远程系统管理员登录界面 2 1 1 1 尝试万能密码 2 1 1
  • 统计学中的Bootstrap方法(Bootstrap抽样)

    Bootstrap又称自展法 自举法 自助法 靴带法 是统计学习中一种重采样 Resampling 技术 用来估计标准误差 置信区间和偏差 Bootstrap是现代统计学较为流行的一种统计方法 在小样本时效果很好 机器学习中的Bagging
  • C语言实现成语接龙完整版

    C语言实现成语接龙报告完整版 代码在最后面 实验报告书 实验名称 成语接龙人机对战游戏 摘要 成语接龙是中华民族传统的文字游戏 它有着悠久的历史 也有广泛的社会基础 是老少皆宜的民间文化娱乐活动 同时成语又是体现我国文字 文化 文明的一个缩
  • c# 微信支付宝退款

    支付宝 根据官网接口参数传即可 private static string appId XXX appid private static string privateKeyPem XXX 私钥private static string Al
  • kong的端口简介以及如何远程连接kong的管理端口

    KONG的端口 kong有四个端口号 分别为两个代理端口 proxy listen 0 0 0 0 8000 0 0 0 0 8443 ssl 两个管理端口 admin listen 127 0 0 1 8001 127 0 0 1 844
  • PAT : PAT (Basic Level) Practice(中文)答案(1001 ~ 1095)(纯C编写)

    题目集地址 报名了12月的PAT B 先试试水 已完成 2018 10 22 2018 11 14 更新 2018 12 09 PAT乙级考试100分 考试代码已更新 冬天坐火车跑去考试冻懵了 来年对战PAT甲级考试 目录 目录 题目集地址
  • Transactional outbox pattern

    文章目录 Transactional outbox pattern 事件驱动架构 Event Driven Architecture EDA 数据库事务和消息发布的一致性问题 Transactional outbox如何解决数据事务和消息发
  • FastDFS踩坑记

    FastDFS踩坑记 本篇文章转载于FastDFS作者 余庆 大佬的 FastDFS分享与交流 公众号 分享几个收集到的FastDFS踩坑案例 供大家参考 以防掉进同一个坑里 欢迎在评论区补充踩坑案例 案例一 我在之前的公司碰到的案例 st
  • HTML5&CSS3笔记:CSS3过渡、变形和动画

    目前的情况是 如果页面上需要一些动画效果 要么你自己编写 JavaScript 要么使用 JavaScript 框架 如 jQuery 来提高效率 但是 虽然 CSS3 不可能在短期内取代 jQuery 或类似的框架 但它完全有能力做一些如
  • in和exsits、count(*)查询优化

    一 in和exsits 1 1 原则 小表驱动大表 即小的数据集驱动大的数据集 1 2 in 适用场景 当B表的数据集小于A表的数据集时 in优于exists select from A where id in select id from
  • VC的血与泪,最难尽调的是人性————失败风投案例分析

    VC的血与泪 最难尽调的是人性 失败风投案例分析 风险投资 Venture Capital 简称是VC 在中国是一个约定俗成的具有特定内涵的概念 其实把它翻译成创业投资更为妥当 广义的风险投资泛指一切具有高风险 高潜在收益的投资 狭义的风险
  • 【因果推断与机器学习】Causal Inference:Chapter_3

    Identification 当我们以因果结构图模型的形式捕获了我们的因果假设 因果分析的第二个阶段就是识别 在这个阶段 我们的目标是分析我们的因果模型 包括特征之间的因果关系以及观察到哪些特征 以确定我们是否有足够的信息来回答特定的因果推
  • UE4 C++ 结构体数组使用AddUnique方法添加元素报错

    当使用TArray的AddUnique方法给结构体数组添加元素时 如果结构体没有重写 操作符时就会报错 那么为什么会报这个错呢 因为AddUnique方法在添加元素前会将传入的元素在数组内搜索一遍 也就是Find 函数 在Find函数内部用