Ich versuche, eine verschachtelte Builder-Klasse in C++ zu entwickeln, aber ich bekomme diese "ungültige Verwendung von unvollständigen Typ 'Klasse Npc :: Builder <' T>" Fehler. Ich habe viel gesucht und konnte keine Antwort finden. Kann mir bitte jemand helfen?Builder-Muster, Vorlagen und verschachtelte Klasse
Hier ist mein Code:
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>();
...
Dank!
Ich glaube nicht, das ist die wirkliche Problem. In der Tat muss man die Vorlage in Kopfzeilen implementieren, dies führt jedoch nur zu Linker-Fehlern. Hier hat OP Kompilierzeitfehler, die höchstwahrscheinlich auf das Fehlen von typename zurückzuführen sind. – vsoftco
Verschieben Sie Ihre NPC-Implementierung in die .h-Datei. Der gesamte Vorlagencode muss von der Quelle, an der er verwendet wird, zugänglich sein. Zum Beispiel, wenn Sie eine Template-Klasse haben - es muss eine Header-Only-Klasse sein, wenn Sie es in äußeren Code verwenden müssen – fnc12