c++ - 指针相关的 UE4 崩溃。我的指针哪里错了?
问题描述
我正在创建一个第三人称激光标签射击游戏,但我在创建我的武器层次结构时遇到了困难。我的主要问题是我的编辑器因代码中指针的一些错误导致的访问错误而崩溃,而且我对指针的理解不足以自己解决这个问题。
我正在尝试将武器添加到我的默认棋子 ALTPlayer。我通过使用 TSubclassOf 来确保我只能将 ALTWeapon 的孩子附加到我的角色上
如果它有助于我的解释,当前的层次结构是:
APawn->ALTWeapon->ALLaserGun
...而且我计划添加更多以 ALTWeapon 为父类的类。我希望这将使我的代码更有条理,更容易为每种武器编写不同的功能。
考虑到这一点,我将从我的 ALTPlayer.h 文件开始。在这里,我将 WeaponClass 声明为我的子类变量
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "LTPlayer.generated.h"
class ALTWeapon;
UCLASS()
class LASERTAG_API ALTPlayer : public ACharacter
{
GENERATED_BODY()
public:
// Sets default values
ALTPlayer();
// Player weapon
UPROPERTY(EditAnywhere)
TSubclassOf<ALTWeapon> WeaponClass;
};
现在我将进入我的 ALTPlayer.cpp 文件。在这里,我试图创建一个存储在 WeaponClass 中的 ALaserGun 对象。(我也不确定这是否正是我应该这样做的)
#include "LTPlayer.h"
#include "LaserGun.h"
// Sets default values
ALTPlayer::ALTPlayer()
{
// Creating Weapon
this->WeaponClass->GetDefaultObject<ALaserGun>();
}
此时,我希望在 ALTPlayer 的子蓝图中看到一个 ALaserGun 组件。虽然,由于我遇到了导致编辑器崩溃的指针问题,但我不知道这是否是这段代码产生的。
如果有人对如何修复我的指针有任何见解,这样我就不会遇到访问冲突,那就太棒了!
解决方案
当您尝试访问其默认对象但尚未将其分配给任何东西时,您正试图取消对 WeaponClass 的引用。
您可以在构造函数初始化列表中对其进行初始化,如下所示:
ALTPlayer::ALTPlayer()
: WeaponClass(ALTWeapon::StaticClass())
{
}
如果这是一个可以在蓝图默认设置中设置的类,您还可以通过在 PreInitializeComponents 中设置它来确保它具有值:
宣言:
//~ Begin AActor Interface
virtual void PreInitializeComponents() override;
//~ End AActor Interface
定义:
void ALTPlayer::PreInitializeComponents()
{
Super::PreInitializeComponents();
// Fallback to default Weapon class if none was specified.
if (WeaponClass == nullptr)
{
UE_LOG(LogGameMode, Warning, TEXT("No WeaponClass was specified in %s (%s)"), *GetName(), *GetClass()->GetName());
WeaponClass = ALTWeapon::StaticClass();
}
}
推荐阅读
- c - C - 发生“错误:无法访问地址处的内存”
- amazon-web-services - 为使用 for_each 创建的死信队列添加 SQS 重新驱动策略时如何修复错误消息
- python - Django QueryDict 如何确保“加号”不会在 QueryDict 中消失?
- python - 如何用python有效地替换word文档中的句子
- javascript - 在 ubuntu 20.04 中部署 nodejs 应用程序时出现“ERR_SSL_VERSION_OR_CIPHER_MISMATCH”错误
- python - 您可以从 Python 脚本中删除 BigQuery 中的行吗?
- python - 找到给定值的节点的最短路径 - 二叉树
- botframework - 如何检查机器人/应用程序是否已从 ms 团队中卸载?
- php - php mysql 从数据库中的三个表中选择信息
- wordpress - 联系表格 7 - 管道未发送正确值的可选收件人