Нелегальная косвенность в шаблонах C ++

Я получил шаблон класса, и как только он получает 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
}

0

Решение

Ваша проблема в том, что if это время выполнения Если проверка, и все возможные типы должны компилироваться, независимо от того, мог ли код вообще когда-либо выполняться. Так когда T является string, * приводит к сбою кода.

Самое простое решение — предоставить перегруженный operator<< который работает с указателями и удалить *:

ostream& operator<< (ostream &wyjscie, Para const* ex)
{
return wyjscie << *ex;
}
2

Другие решения

T t

Не указатель, как упоминает 0x499602D2 ..

T* t

Указатель, и может быть разыменован как cout<<*t<<endl; Параметры шаблона должны быть типы, и указатель на тип не является действительным.

1

По вопросам рекламы [email protected]