habe ich eine sehr spezielle Frage (nicht Sinn zu fragen, warum ich dies wollen, wäre es sehr schwierig sein, es zu erklären)Aufruf Template-Funktion der Eltern-Klasse von Abgeleitete Klasse
Ich möchte ein Template-Funktion aufrufen von einer Eltern-Klasse, die indirekt den Destructor der Kindes-Klasse ruft
ich diesen Code zu implementieren versucht:
die übergeordnete Klasse:
template <typename BaseType> //OpcUa_NodeInstance.h
class OpcUa_NodeInstance
{
public:
template <typename BaseTypee, unsigned PrefixID>
static void deleteType(unsigned int ObjID);
};
template <typename BaseType> // OpcUa_NodeInstance.cpp
template <typename BaseTypee, unsigned PrefixID>
void OpcUa_NodeInstance<BaseType>::deleteType(unsigned ObjID)
{
if (ObjID == PrefixID)
{
NodeManagerRoot* pNodeManagerRoot = NodeManagerRoot::CreateRootNodeManager();
auto dummyTypeInstance = new BaseTypee(UaNodeId(PrefixID, 2),
UaString("Dummy_AutomationDomainType"), 2, pNodeManagerRoot);
delete dummyTypeInstance;
}
}
Das Kind Klasse:
class AutomationDomainTypeBase: // AutomationDomainTypeBase.h
public OpcUa_NodeInstance<AutomationDomainTypeBase>
{
public:
template <typename BaseType, unsigned int PrefixID>
static void deleteType(unsigned int ObjID);
}
das Problem ist, dass Visual Studio
Error 5 error LNK2001: unresolved external symbol "public: static void __cdecl AutomationDomainTypeBase::deleteType<class AutomationDomainTypeBase,1018>(unsigned int)"
AutomationDomainTypeBase einen Linker Fehler
Ich vermute, der Compiler kann nicht erkennen, zeigt, dass die Implementation of deleteType ist bereits im Parent -Klasse. Da ich mehr als 400 Kind-Klassen habe, suche ich nach einer Möglichkeit, diese Funktion nicht in allen Kindern zu implementieren.
Der Code, den Sie in Ordnung mit mir zur Verfügung gestellt hat kompilieren, ms VC14 verwendet wird. – shrike
@shrike danke, ich habe vergessen, die Parent.h, ich habe mein Thema bearbeitet. Kannst du mir mit dem Linker Fehler helfen? – Pepelee
'Vorlage Vorlage
bipll