【发布时间】:2014-09-23 06:03:29
【问题描述】:
我尝试将对象this 从其他对象传递给函数模板,但它一直给我编译错误。这是我的模板函数的样子:
在标题中
template<class T>
void StopAndRemoveParticals(ParticleSystemQuad* &emitter,T* &parent);
在 C++ 中
template<class T>
void ParticleFactory::StopAndRemoveParticals(ParticleSystemQuad* &emitter,T* &parent)
{
bool ParticlesEmitterIsActive = emitter->isActive();
if(emitter!= NULL)
{
particaleTagName tag = (particaleTagName)emitter->getTag();
parent->m_Parent->removeChildByTag(emitter->getTag());
}
}
从某个对象调用这个函数:
1>\projects\game\classes\solutioncontainer.cpp(114): error C2664: 'void ParticleFactory::StopAndRemoveParticals<SolutionContainer>(cocos2d::ParticleSystemQuad *&,T *&)' : cannot convert parameter 2 from 'SolutionContainer *const ' to 'SolutionContainer *&'
1> with
1> [
1> T=SolutionContainer
1> ]
我在这里做错了什么,为什么我不能将指针传递给引用?
【问题讨论】:
-
为什么需要传递对指针的引用?您没有修改它们,因此您可以从参数中删除
&。 -
是的,我确实尝试过,但仍然给我错误:rror LNK2019: unresolved external symbol "public: void __thiscall ParticleFactory::StopAndRemoveParticals
(class cocos2d::ParticleSystemQuad * &,class SolutionContainer * )" (??$StopAndRemoveParticals@VSolutionContainer@@@ParticleFactory@@QAEXAAPAVParticleSystemQuad@cocos2d@@PAVSolutionContainer@@@Z) 在函数 "public: void __thiscall SolutionContainer::InnerCleanPreviousLevel(void)" (?InnerCleanPreviousLevel@SolutionContainer@@QAEXXZ) 中引用) -
您是否同时更改了声明(在标题中)和定义(在 cpp 文件中)?
-
@user63898:链接错误可能是因为您在一个源文件中定义模板并在另一个源文件中使用它。您通常需要在 headers 中定义模板:stackoverflow.com/questions/495021
-
顺便说一句,你应该避免使用 C-Cast。