У меня есть векторный класс, который я хочу иметь возможность ввода / вывода из объекта QTextStream. Предварительное объявление моего векторного класса:
namespace util {
template <size_t dim, typename T>
class Vector;
}
Я определяю operator<<
как:
namespace util {
template <size_t dim, typename T>
QTextStream& operator<<(QTextStream& out, const util::Vector<dim,T>& vec)
{
...
}
template <size_t dim, typename T>
QTextStream& operator>>(QTextStream& in,util::Vector<dim,T>& vec)
{
..
}
}
Однако, если я попытаюсь использовать эти операторы, Visual C ++ возвращает эту ошибку:
error C2678: binary '<<' : no operator found which takes a left-hand operand of type 'QTextStream' (or there is no acceptable conversion)
Несколько вещей, которые я пробовал:
- Изначально методы были определены как друзья шаблона, и с g ++ он работает нормально.
- Методы были перемещены за пределы пространства имен util
- Я изменил определение шаблонов, чтобы оно соответствовало тому, что я нашел на различных сайтах Visual C ++.
Исходное объявление друга:
friend QTextStream& operator>>(QTextStream& ss, Vector& in) { ... }
Версия, адаптированная для Visual C ++:
friend QTextStream& operator>> <dim,T>(QTextStream& ss, Vector<dim,T>& in);
с функцией, предварительно объявленной до класса и реализованной после. Я проверил, правильно ли включен файл, используя:
#pragma message ("Including vector header")
И все вроде нормально. Кто-нибудь знает, что может быть не так?
Примечание: определение оператора даже не появляется в списке операторов << найдено. </p>