Я пытаюсь перегрузить оператор вывода потока для моего шаблонного класса.Я сталкивался со всевозможными проблемами с неопределенными ссылками, и теперь ошибка
"invalid use of template-id 'operator<< <>' in declaration of primary template"
Я прочитал каждый Stackoverflow и другие сообщения на форуме, которые я мог найти в правильном объявлении, и, кажется, их несколькоспособы, которыми люди управляют моим желаемым результатом.Может кто-нибудь, пожалуйста, помогите мне понять, что идет не так?
.h файл:
//class must be forward declared because it contains a friend function template
template<class T> class messageTemplate;
//friend function also must be forwards declared
template<class A> std::ostream &operator<<(std::ostream &os, messageTemplate<A> &aTemplate);
template <class T>
class messageTemplate {
public:
messageTemplate(const std::string &topic, T data);
template <class A>
friend std::ostream &operator<< <>(std::ostream &os, messageTemplate<A> &aTemplate);
private:
std::string topic;
T data;
};
.cpp:
template class messageTemplate<int>;
template class messageTemplate<double>;
template class messageTemplate<std::string>;
template class messageTemplate<bool>;
template<class T>
messageTemplate<T>::messageTemplate(const std::string &topic, T data):topic(topic), data(data) {};
template <class T>
std::ostream &operator<< (std::ostream &os, messageTemplate<T> &aTemplate) {
os << "topic: " << aTemplate.topic << " data: " << aTemplate.data;
return os;
};
На данный момент у меня естьпопробовал и применил так много решений, что мне кажется, что начинать с нуля может быть лучше.
Полное сообщение об ошибке (происходит при объявлении в файле het .h):
ошибка: недопустимое использованиеидентификатора шаблона 'operator << <>' в объявлении основного друга шаблона std :: ostream & operator << <> (std :: ostream & os, messageTemplate & aTemplate);