Я получил шаблон класса, и как только он получает string
как T
и другие Para*
как T
,
Я перегружен <<
за Para
,
friend ostream& operator<< (ostream &wyjscie, Para const& ex){
wyjscie << "(" << ex.wrt << ", " << ex.liczbaWystapien <<")"<< endl;
return wyjscie;
}
поэтому, чтобы распечатать его, я должен использовать cout<<*objectOfClassPara<<endl;
в противном случае я буду печатать
адрес, но я не могу сделать это для string
,
Как исправить этот код Уднер?
T t = n->key;
//cout<<n->key<<endl;
cout<<t<<endl;
if (is_same<T, Para*>::value){
cout<<*t<<endl; //IILEGAL INDIRECTION
}
Ваша проблема в том, что if
это время выполнения Если проверка, и все возможные типы должны компилироваться, независимо от того, мог ли код вообще когда-либо выполняться. Так когда T
является string
, *
приводит к сбою кода.
Самое простое решение — предоставить перегруженный operator<<
который работает с указателями и удалить *
:
ostream& operator<< (ostream &wyjscie, Para const* ex)
{
return wyjscie << *ex;
}
T t
Не указатель, как упоминает 0x499602D2 ..
T* t
Указатель, и может быть разыменован как cout<<*t<<endl;
Параметры шаблона должны быть типы, и указатель на тип не является действительным.