C++ 获取模板错误
我得到编译错误,请帮助我无法解决它C++ 获取模板错误,c++,templates,C++,Templates,我得到编译错误,请帮助我无法解决它 class A { public : A() {} virtual ~A() {} int getID() { return m_id; } void setID(int id) { m_id = id ; } private: int m_id ; }; class B : public A { };
class A {
public :
A() {}
virtual ~A() {}
int getID() { return m_id; }
void setID(int id) { m_id = id ; }
private:
int m_id ;
};
class B : public A {
};
class C: public A {
};
template<class T>
T* returnObject(vector<T*>& vec, int id)
{
for(vector<T*>::iterator itr =vec.begin(); itr != vec.end() ; ++itr)
{
if(id == (*itr)->getID()) return (*itr);
}
return NULL;
}
int main()
{
vector<B*> b1;
vector<C*> c1;
B *b = new B();
b->setID(10);
b1.push_back(b);
b = new B();
b->setID(20);
b1.push_back(b);
b = new B();
b->setID(30);
b1.push_back(b);
C *c = new C();
c->setID(6);
c1.push_back(c);
c = new C();
c->setID(12);
c1.push_back(c);
c = new C();
c->setID(18);
c1.push_back(c);
B *bcd = returnObject<B>(b1,30);
cout<< bcd <<endl ;
return 0;
}
A类{
公众:
A(){}
虚拟~A(){}
int getID(){return m_id;}
void setID(int id){m_id=id;}
私人:
国际货币基金组织;
};
B类:公共A{
};
C类:公共A类{
};
模板
T*returnObject(向量和向量,整数id)
{
对于(vector::iterator itr=vec.begin();itr!=vec.end();++itr)
{
if(id==(*itr)->getID())返回(*itr);
}
返回NULL;
}
int main()
{
载体b1;
向量c1;
B*B=新的B();
b->setID(10);
b1.推回(b);
b=新的b();
b->setID(20);
b1.推回(b);
b=新的b();
b->setID(30);
b1.推回(b);
C*C=新的C();
c->setID(6);
c1.推回(c);
c=新的c();
c->setID(12);
c1.推回(c);
c=新的c();
c->setID(18);
c1.推回(c);
B*bcd=返回对象(b1,30);
cout问题在于vector::iterator
依赖于模板参数。编译器不知道每个std::vector
专门化都有一个属于类型的iterator
成员,因此需要显式声明它是一个类型:
或基于范围的循环:
for (auto&& element : vec)
或std::如果,则查找:
std::find_if(std::begin(vec), std::end(vec),
[id](auto&& el){ return id == el->getID() });
虽然std::find_if
在未找到元素时返回std::end(vec)
,而不是NULL
或只使用auto
。避免了所有的混淆,在这种情况下非常清楚。甚至for(T*item:vec){/*…*/}
for(auto itr =vec.begin(); itr != vec.end() ; ++itr)
for (auto&& element : vec)
std::find_if(std::begin(vec), std::end(vec),
[id](auto&& el){ return id == el->getID() });