0

テンプレートなしでコードをコンパイルしようとしましたが、テンプレート コードを追加すると問題なく動作し、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);

}
4

1 に答える 1

2

inchealth私の精神的なデバッグ感覚は、 の定義を別の cpp ファイルに入れたことを示唆していますmain

テンプレート化された関数本体は、呼び出した時点で可視である必要があります。または、必要なバージョンをインスタンス化するようにコンパイラに明示的に指示する必要があります。

したがって、私が正しければ、解決策は、の定義をinchealth#include を定義するファイルからヘッダーに移動するか、次mainの行を追加することです

template void inchealth<archer>(archer&,int);

inchealth定義されているファイル内のの定義の下( の宣言がそこに表示されていると仮定しarcherます)。前者が好ましい。

于 2013-05-27T21:09:43.383 に答える