Ich habe ein echtes Problem, die wie folgt zusammengefasst werden können:Vorlage Mehrfachvererbung mehrdeutige Symbolfehler
template <typename BaseType>
class TemplateClass
{
public:
template <typename BaseTypee, unsigned PrefixID>
static void deleteType(unsigned int ObjID)
{
}
};
class ParentClass:
public TemplateClass<ParentClass>
{
};
class ChildClass:
public ParentClass, public TemplateClass<ChildClass>
{
using TemplateClass<ChildClass>::deleteType; //Ambigious Symbol Compiler-Error
};
ich die Funktion deleteType
wie folgt aufrufen:
TemplateClass<ChildClass>::deleteType<ChildClass, ChildType>(ChildType);
Ich möchte die Funktion aufrufen deleteType in der ChildClass Klasse, aber ohne irgendeine Erklärung wird die Funktion in ParentClass aufgerufen werden.
Wie kann ich den ambigen Symbolfehler in der Using-Phrase loswerden? Kann ich meine Aufgabe mit einem anderen Ansatz erreichen?
FYI: Ursprünglich habe ich versucht Aufruf der Funktion mit (es ändert sich nichts)
ChildClass::deleteType<ChildClass, ChildType>(ChildType);
Komische: es stellt nach wie vor, obwohl eine rot unterstrichen hat. Wenn ich debuggen, wird die Vorlage noch in Parent genannt werden, bei der Kompilierung keine Warnung noch Fehler geworfen ..
Bitte geben Sie eine [MCVE] . – Barry
'ChildClass :: TemplateClass :: deleteType (ChildType);' –
Pixelchemist
Sie haben zwei völlig unterschiedliche, nicht verwandte Template-Parameter mit dem Namen 'BaseType', von dem Ihr' deleteType' abhängt. Einer ist ein Parameter von 'TemplateClass' und der andere ist ein Parameter von' deleteType'. Insgesamt hängt "deleteType" von drei Vorlagenparametern ab, von denen einer den gleichen Namen und der andere den gleichen Namen hat. Das willst du wahrscheinlich nicht. –