C++でネストされたビルダークラスを開発しようとしていますが、この「不完全な型の無効な使用」クラスNpc :: Builder < 'T>」エラーが続いています。私はたくさんの検索をしましたが、私は答えを見つけることができませんでした。誰でも助けてくれますか?ビルダーパターン、テンプレート、ネストされたクラス
ここに私のコードは次のとおりです。
Npc.h
class Npc{
...
template<class T, class enable_if<is_base_of<Npc, T>::value>::type* = nullptr>
class Builder{
private:
T* instance;
public:
Npc::Builder<T>* create();
Npc::Builder<T>* name(string name);
Npc::Builder<T>* charClass(string charClass);
Npc::Builder<T>* hp(int hp);
Npc::Builder<T>* mana(int mana);
Npc::Builder<T>* attackPower(int attackPower);
Npc::Builder<T>* magicPower(int magicPower);
Npc::Builder<T>* defense(int defense);
Npc::Builder<T>* magicDefense(int magicDefense);
T* build();
};
};
Npc.cpp
...
template<class T, class enable_if<is_base_of<Npc, T>::value>::type* = nullptr>
Npc::Builder<T>* Npc::Builder<T>::create() {
...
}
main.cpp
...
Npc::Builder<Warrior>* builder = new Npc::Builder<Warrior>();
...
ありがとう!
を、私はそれが本当だとは思いません問題。実際、ヘッダーにテンプレートを実装する必要がありますが、これはリンカーエラーのみにつながります。ここでOPにはコンパイル時エラーがあります。これは 'typename'がないことから起こりそうです。 – vsoftco
npcの実装を.hファイルに移動します。すべてのテンプレートコードは、使用されているソースからアクセス可能でなければなりません。たとえば、テンプレート化されたクラスを持っている場合は、外部コードで使用する必要がある場合はヘッダのみのクラスにする必要があります – fnc12