Я пытаюсь создать два перегруженных оператора в шаблоне BSTree.h и сталкиваюсь с ошибками, которые действительно не говорят мне, в чем проблема. Выполнение поиска по кодам ошибок отдельно или в сочетании ничего не дало для меня.
Первая перегруженная << для BSTree не вызывает ошибок при компиляции, но вторая перегруженная <<, которую я создал для своей структуры Node, продолжает возвращать следующие ошибки: </p>
ошибка C4430: отсутствует указатель типа - предполагается int. Примечание: C ++ не поддерживает default-int
ошибка C2143: синтаксическая ошибка: отсутствует ',' до '*'
#ifndef BSTREE_H
#define BSTREE_H
#include <iostream>
#include <fstream>
template <typename T>
class BSTree{
friend ostream& operator<<(ostream&, const BSTree<T>&);
public:
BSTree();
//BSTree(const BSTree &);
~BSTree();
void buildTree(ifstream&);
void setType(char);
bool getType(char);
bool insert(T*);
bool isEmpty();
private:
char type;
struct Node{
T* data;
//subnode[0] == left subtree
//subnode[1] == right subtree
Node* subnode[2];
};
Node* head;
void destructorHelper(Node* &);
bool insertHelper(T*, Node* &);
friend ostream& operator<<(ostream&, const Node*&);
};
Компилятор сообщает, что ошибки происходят в строке, где находится перегруженный << код Node. </p>
template <typename T>
ostream& operator<<(ostream &output, const BSTree<T> &out) {
if(head != NULL)
output << head;
return output;
}
template <typename T>
ostream& operator<<(ostream &output, const Node* &out) {
if(out != NULL){
output << out->subnode[0];
output << *out->data;
output << out->subnode[1];
}
return output;
}
Разрешено ли мне объявлять 2 перегруженных << в одном и том же .h, даже если они для разных объектов? Или я что-то напутал в своем коде? </p>