【问题标题】:Unable to use std::vector in Unreal Engine无法在虚幻引擎中使用 std::vector
【发布时间】:2017-11-12 02:15:01
【问题描述】:

在我的 UE4 项目中使用 STL 功能时遇到问题。

Intellisense 的红线显示错误,并且不理解我要写的内容。

我使用的是 VS 2017,并且还下载了 Unreal 开发设置。

我已经使用相同的 IDE 测试了一个空白项目的 STL 功能,它在那里运行良好,没有智能感知问题。

我假设我缺少与虚幻引擎有关的某种特殊设置,但我不知道它是什么,而且似乎在他们的文档中找不到任何内容。

谢谢

#include <vector>

#include "CoreMinimal.h"
#include "Interactable.h"
#include "Hand.generated.h"

class Card;

UCLASS()
class SKYLINE_API AHand : public AInteractable
{
    GENERATED_BODY()

public:

    void PlayCard();
    void DiscardCard();

private:

    std::vector<Card*> m_vpCards;

};

【问题讨论】:

  • 错误在哪里,它说什么?
  • 我找到了问题所在。原来 UE 更喜欢你使用他们自己的容器,例如 TArray,其工作原理与 std::vector

标签: c++ vector stl unreal-engine4


【解决方案1】:

出于兼容性和可移植性的原因,虚幻引擎使用自己的数据结构而不是标准模板库。 查看 Kaiserludi 的这篇文章以了解详细推理:https://forums.unrealengine.com/development-discussion/c-gameplay-programming/46700-why-doesn-t-ue-utilize-stl-containers

对于向量,您应该使用 TArray:https://api.unrealengine.com/INT/API/Runtime/Core/Containers/TArray/index.html

此外,当声明类型不是直接来自虚幻源的字段时,您应该始终将它们声明为 UPROPERTY(),否则带有垃圾的引擎会在您不知情的情况下收集其内存。

如果你想真正使用 std::vector,一个名叫 feixuwu 的人在他/她的 websocket 上使用了它。你可以在这里查看代码:https://github.com/feixuwu/UEWebsocket

【讨论】:

    【解决方案2】:

    删除已保存的、二进制文件和中间文件夹,然后右键单击您的 Unreal 项目文件并选择生成 VS 项目文件,然后打开您的项目。希望这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-04
      • 2022-12-04
      • 2020-05-21
      • 2020-12-11
      • 2019-07-20
      • 2018-09-01
      • 2018-02-18
      • 2021-06-06
      相关资源
      最近更新 更多