Я не знаю, что делать. Я всегда получаю ошибку, используя простой класс и простую функцию шаблона. Я прочитал все другие решения, но они мне не помогли.Функция шаблона в классе
Рядом с некоторыми другими классами у меня есть простой класс данных:
class Data{
public:
template <class T>
T dat();
int id;
union{
char c;
int i;
double d;
};
};
и функцию DAT:
template <class T>
T Data::dat(){
if(id == 1) return i;
if(id == 2) return d;
if(id == 3) return c;
}
Как вы можете видеть, я хочу проверить Ид и возвращения Int, double или char. Теперь я пытался напечатать значение в главной функции, как это:
Data test;
test.id=1;
test.i = 12;
cout<<test.dat();
Но я всегда получаю сообщение об ошибке:
Error: Could not find a match for Data::dat<Data::T>() needed in main(int, char**).
Где проблема ??
Спасибо
Кроме того, функция шаблона создает конкретную функцию (я использую терминологию здесь, это просто точка) с одним возвращаемым типом. Таким образом, вы не можете возвращать вещи, которые не относятся к объявленному типу возврата, но не без неявных преобразований или кастингов. Тело вашей функции шаблона подразумевает, что вы еще не полностью понимаете концепцию. – StoryTeller
Как другая сторона примечания, кажется, вы пытаетесь сделать, в ограниченном порядке, именно то, что упомянули классы Джеймса Канзе. Посмотрите на них. – StoryTeller
Что вы на самом деле пытаетесь сделать? Чтобы указать 'dat', или 'dat ' или 'dat ' * и * использовать флаг, чтобы решить, что тип запутан и может вызвать множество ошибок. –
doctorlove