ERROR: S2760: Unexpected token '<', expected ',' inside a ECS
ERROR: S2760: Unexpected token '<', expected ',' inside a ECS
你好互联网的大脑:)。我正在深入 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 代码:
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;
我试过检查它,重写它,我的室友检查了一遍,但是我的眼睛欺骗了我...
请帮忙?
我不确定所有 Component、ComponentArray 和 ComponentBitSet 到底是什么样子,但也许是这些行:
ComponentArray[getComponentTypeID<T>()] = c;
ComponentBitSet[getComponentTypeID<T>()] = true;
应该是这样的:
componentArray[getComponentTypeID<T>()] = c;
componentBitSet[getComponentTypeID<T>()] = true;
ComponentArray
和 ComponentBitSet
只是类型,索引它们不是一回事。 componentArray
和 componentBitSet
是与这些类型相对应的 Entity
class 的成员,并且(我想)是某种允许索引访问的类型。
你好互联网的大脑:)。我正在深入 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 代码:
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;
我试过检查它,重写它,我的室友检查了一遍,但是我的眼睛欺骗了我... 请帮忙?
我不确定所有 Component、ComponentArray 和 ComponentBitSet 到底是什么样子,但也许是这些行:
ComponentArray[getComponentTypeID<T>()] = c;
ComponentBitSet[getComponentTypeID<T>()] = true;
应该是这样的:
componentArray[getComponentTypeID<T>()] = c;
componentBitSet[getComponentTypeID<T>()] = true;
ComponentArray
和 ComponentBitSet
只是类型,索引它们不是一回事。 componentArray
和 componentBitSet
是与这些类型相对应的 Entity
class 的成员,并且(我想)是某种允许索引访问的类型。