我尝试在没有模板的情况下编译我的代码,当我添加模板代码时它工作得很好我得到了2019LNK错误。
我课程开头时有以下内容:
template<typename T>
friend void inchealth(T &,int);
功能声明:
template<typename T>
void inchealth(T &x, int y)
{x.health += y;}
(健康是我班级的成员变量)
编辑这里是确切的代码:
class archer
{
template <class T>
friend void inchealth(T &,int);
public:
archer(){health = 150; mana = 50; armor = 50; damage = 10;}
int checkhealth() {return health;}
int checkmana() {return mana;}
int checkarmor() {return armor;}
int checkdamage(){return damage;}
private:
int health;
int mana;
int armor;
int damage;};
template <class T>
void inchealth(T &x, int y)
{x.health += y;}
void main()
{
archer a;
inchealth(a,5);
}
答案 0 :(得分:2)
我的通灵调试意识表明你已将inchealth
的定义放在单独的cpp文件中main
。
模板化函数体需要在您调用它们的位置可见,或者您需要明确告诉编译器实例化您想要的版本。
所以,如果我是正确的,解决方案是将inchealth
的定义移动到定义main
的文件中的#include标题,或者添加行
template void inchealth<archer>(archer&,int);
低于定义它的文件中inchealth
的定义(假设archer
的声明在那里可见)。前者是首选。