【问题标题】:ERROR: S2760: Unexpected token '<', expected ',' inside a ECS错误:S2760:ECS 内出现意外的令牌“<”,预期的“,”
【发布时间】:2021-06-02 15:13:47
【问题描述】:

您好,互联网的大佬们 :)。我正在深入 C++ 的深处。我收到了这个错误,即使它应该是一个简单的错误,我一点也不知道我在哪里犯了错误。

这是模板等的声明:

using ComponentID = std::size_t;

inline ComponentID getComponentTypeID()
{
    static ComponentID lastID = 0;
    return lastID++;
}

template <typename T> inline ComponentID getComponentTypeID() noexcept
{
    static ComponentID typeID = getComponentTypeID();
    return typeID;
}

这是我目前正在研究的一个实体组件系统的整个类的代码:

class Entity
{
private:
    bool active = true;
    std::vector<std::unique_ptr<Component>> components;

    ComponentArray componentArray;
    ComponentBitSet componentBitSet;
public:
    void update()
    {
        for (auto& c : components) c->update();
        for (auto& c : components) c->draw();
    }
    void draw() {}

    bool isActive() const { return active; }
    void destroy() { active = false; }

    template <typename T> bool hasComponent() const
    {
        return componentBitSet[getComponentTypeID<T>()];
    }

    template <typename T, typename... TArgs>
    T& addComponent(TArgs&&... mArgs)
    {
        T* c(new T(std::forward<TArgs>(mArgs)...));
        c->entity = this;
        std::unique_ptr<Component> uPtr{ c };
        components.emplace_back(std::move(uPtr));

        ComponentArray[getComponentTypeID<T>()] = c;
        ComponentBitSet[getComponentTypeID<T>()] = true;

        c->init();
        return *c;
    }

    template<typename T> T& getComponent() const
    {
        auto ptr(componentArray[getComponentTypeID<T>()]);
        return *static_cast<T*>(ptr);
    }
};

错误应该在这条线上的某个地方:

ComponentArray[getComponentTypeID<T>()] = c;

我试着检查它,重写它,我的室友检查了它,但我的眼睛欺骗了我...... 请帮忙?

【问题讨论】:

  • ComponentArray - 是一种类型。

标签: c++ templates compiler-errors syntax-error game-engine


【解决方案1】:

我不确定所有 Component、ComponentArray 和 ComponentBitSet 到底是什么样子,但可能是以下几行:

    ComponentArray[getComponentTypeID<T>()] = c;
    ComponentBitSet[getComponentTypeID<T>()] = true;

应该是这样的:

    componentArray[getComponentTypeID<T>()] = c;
    componentBitSet[getComponentTypeID<T>()] = true;

ComponentArrayComponentBitSet 只是类型,对它们进行索引不是一回事。 componentArraycomponentBitSet 是与这些类型相对应的 Entity 类的成员,并且(我想)属于允许索引访问的某种类型。

【讨论】:

  • 天哪。你说得对。不知道我怎么会错过。非常感谢你 :)。你已经结束了大约 4 个小时的漫长斗争,好先生。
猜你喜欢
  • 2020-01-05
  • 1970-01-01
  • 2021-10-17
  • 2022-01-12
  • 1970-01-01
  • 2018-09-20
  • 2018-09-13
  • 2018-03-06
  • 2021-03-28
相关资源
最近更新 更多