【问题标题】:Pass 'this' into function template, gives error将“this”传递给函数模板,给出错误
【发布时间】: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>          ]

我在这里做错了什么,为什么我不能将指针传递给引用?

【问题讨论】:

  • 为什么需要传递对指针的引用?您没有修改它们,因此您可以从参数中删除 &amp;
  • 是的,我确实尝试过,但仍然给我错误: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。

标签: c++ function-templates


【解决方案1】:

这似乎既是 const 的问题(您可能试图从另一个 const 成员函数调用 StopAndRemoveParticals),也是试图获取对 this 指针的引用的问题。

代码似乎不需要对指针的引用,因此首先要删除它们。解决 const 问题需要您在调用StopAndRemoveParticals 的函数中进行修改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 2017-12-25
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多