Я рассмотрел несколько потоков в stackoverflow, прежде чем подумал задать этот вопрос (поскольку их было несколько), но даже благодаря реализации некоторых решений это, похоже, не помогает моей проблеме. Это или я делаю это неправильно.
В любом случае, ошибка, которую я получаю:
error: no match for 'operator<<' in 'os << itr'
Мой класс:
template <typename T>
class btree {
public:
btree(size_t maxNodeElems);
~btree() {}
struct node { // <- this is just a declaration of a private inner-class
list <T> elements;
node *lvl;
};
private:
size_t maxNodeElems;
node* root; // <- this is the actual private member
};
template <typename T>
btree<T>::btree(size_t maxNodeElems) {
if (maxNodeElems > 0) maxNodeElems = maxNodeElems;
root = new node;
root->lvl = new node[maxNodeElems+1];
}
template <typename T>
pair <typename btree<T>::iterator, bool> btree <T>::insert (const T& elem) {
root->elements.push_back(elem);
root->elements.sort();
std::pair <typename btree<T>::iterator, bool> e;
return e;
}
template <typename T>
std::ostream& operator<<(std::ostream& os, const btree<T>& tree) {
class list <T>::iterator itr = tree.root->elements.begin();
for (; itr != tree.root->elements.end(); ++itr) os << itr;
return os;
}
Я прекрасно понимаю, что моя вставка ничего не возвращает, но я не закончил реализацию этой функции, я просто пытаюсь проверить, как вывести элементы из списка в данный момент. Может кто-нибудь сказать мне, что я делаю не так?