Ошибка шаблона множественного наследования неоднозначного символа
У меня есть реальная проблема, которая может быть обобщена следующим образом:
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
};
Я называю функцию deleteType
как это:
TemplateClass<ChildClass>::deleteType<ChildClass, ChildType>(ChildType);
Я хочу вызвать функцию deleteType в классе ChildClass, но без какого-либо объявления функция будет вызываться в ParentClass.
Как я могу избавиться от неоднозначной ошибки символа в фразе использования? Можно ли выполнить мою задачу с другим подходом?
К вашему сведению: Первоначально я пытался вызвать функцию с (ничего не меняется)
ChildClass::deleteType<ChildClass, ChildType>(ChildType);
забавная вещь: это все еще компилируется, хотя имеет красное подчеркивание. Если я отлаживаю, шаблон будет по-прежнему вызываться в ParentClass, при компиляции не будет ни предупреждений, ни ошибок.
1 ответ
Решение
Положить ваши using
заявление в public:
раздел:
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>
{
public:
using TemplateClass<ChildClass>::deleteType;
};
int main() {
ChildClass::deleteType<void, 0>(0);
}