我有一个包含Entity类型项目的向量。实体是一个抽象类。该向量包含Ball和Paddle类的实例。
以下作品。
std::vector<Entity*>* Level::getEntities()
{
return &this->entities;
}
for(auto entity : *Engine::getLevel()->getEntities())
{
Paddle* paddle = dynamic_cast<Paddle*>(entity);
if(paddle)
{
//It's a paddle!
}
}
因为我需要多次执行此操作,所以我希望有一个功能可以为我执行此操作。我尝试了以下方法:
在我的标题中:
template<class T>
std::vector<T*>* getEntities();
实际功能:
template<class T>
std::vector<T*>* Level::getEntities()
{
std::vector<T*> entitiesOfType;
for(auto entity : entities)
{
T* entityT = dynamic_cast<T*>(entity);
if(entityT) entitiesOfType.push_back(entityT);
}
return &entitiesOfType;
}
现在我想我将可以使用如下功能:
for(Paddle* paddle : *Engine::getLevel()->getEntities<Paddle>())
{
//Only iterating over entities of the type paddle
}
但是出现以下链接器错误:
/ usr / bin / ld:obj / Ball.o:在函数Ball :: paddleCollision()'中: Ball.cpp :(。text + 0x674):对`std :: vector> * Level :: getEntities()'的未定义引用 collect2:错误:ld返回1退出状态 make:*** [Makefile:8:bin / Pong]错误1