Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:S2760:意外令牌'<';,预期的'';ECS内部_C++_Templates_Compiler Errors_Syntax Error_Game Engine - Fatal编程技术网

C++ 错误:S2760:意外令牌'<';,预期的'';ECS内部

C++ 错误:S2760:意外令牌'<';,预期的'';ECS内部,c++,templates,compiler-errors,syntax-error,game-engine,C++,Templates,Compiler Errors,Syntax Error,Game Engine,你好,互联网的大智囊团:)。我正在深入地深入C++的深处。我收到了这个错误,即使这应该是一个容易的错误,我一点也不知道我在哪里犯了错误 以下是模板等的声明: using ComponentID = std::size_t; inline ComponentID getComponentTypeID() { static ComponentID lastID = 0; return lastID++; } template <typename T> inline C

你好,互联网的大智囊团:)。我正在深入地深入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;
}

使用ComponentID=std::size\u t;
内联组件ID getComponentTypeID()
{
静态ComponentID lastID=0;
返回lastID++;
}
模板内联组件ID getComponentTypeID()noexcept
{
静态ComponentID typeID=getComponentTypeID();
返回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);
    }
};
类实体
{
私人:
bool active=true;
std::向量分量;
组件数组组件数组;
组件位集组件位集;
公众:
无效更新()
{
对于(自动&c:组件)c->update();
对于(自动和控制:组件)c->draw();
}
void draw(){}
bool isActive()常量{return active;}
void destroy(){active=false;}
模板bool hasComponent()常量
{
返回componentBitSet[getComponentTypeID()];
}
模板
T&ADD组件(目标和…边缘)
{
T*c(新T(标准:远期(保证金)…);
c->entity=this;
std::unique_ptr uPtr{c};
组件。向后放置(标准::移动(uPtr));
ComponentArray[getComponentTypeID()]=c;
ComponentBitSet[getComponentTypeID()]=true;
c->init();
返回*c;
}
模板T&getComponent()常量
{
自动ptr(componentArray[getComponentTypeID()]);
返回*static_cast(ptr);
}
};
错误应该在这条线上的某个地方:

ComponentArray[getComponentTypeID<T>()] = c;
ComponentArray[getComponentTypeID()]=c;
我试着检查它,重写它,我的室友检查它,但我的眼睛决定了我。。。
请提供帮助?

我不确定所有组件、组件阵列和组件位集的确切外观,但可能是以下几行:

    ComponentArray[getComponentTypeID<T>()] = c;
    ComponentBitSet[getComponentTypeID<T>()] = true;
ComponentArray[getComponentTypeID()]=c;
ComponentBitSet[getComponentTypeID()]=true;
应该是这样的:

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

ComponentArray
ComponentBitSet
只是类型,索引到它们中不是一件事
componentArray
componentBitSet
是与这些类型相对应的
实体
类的成员,并且(我想)是允许索引访问的某种类型。

我不确定所有组件、componentArray和componentBitSet的确切外观,但可能有以下几行:

    ComponentArray[getComponentTypeID<T>()] = c;
    ComponentBitSet[getComponentTypeID<T>()] = true;
ComponentArray[getComponentTypeID()]=c;
ComponentBitSet[getComponentTypeID()]=true;
应该是这样的:

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

ComponentArray
ComponentBitSet
只是类型,索引到它们中不是一件事
componentArray
componentBitSet
是与这些类型对应的
实体
类的成员,并且(我想)是允许索引访问的某种类型。

componentArray
是一种类型。
componentArray
是一种类型。哦,我的上帝。你说得对。不知道我怎么会错过这个。非常感谢:)。你已经结束了大约4个小时的斗争,好先生。哦,我的上帝。你说得对。不知道我怎么会错过这个。非常感谢:)。你已经结束了大约4个小时的斗争,好先生。