Я пытаюсь создать два перегруженных оператора в шаблоне BSTree.h и встречаюсь с ошибками, которые на самом деле не говорят мне, в чем проблема. Выполнение поиска по кодам ошибок отдельно или в соединении не принесло ничего для меня.Невозможно объявить 2 перегруженного друга << в шаблоне .h
Первый перегружен < < для BSTree не вызывает каких-либо ошибок на компиляции, но второй перегружен < < я создал для моего узла структуры постоянно возвращается следующие ошибки:
ошибка C4430: отсутствует спецификатор типа - int. Примечание: C++ не поддерживает
ошибки C2143 по умолчанию-INT: ошибка синтаксиса: отсутствует «» перед „*“
#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*&);
};
Компилятор говорит, что ошибки возникают в строке, где узел перегружен < < код.
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;
}
Am Я не позволил объявить 2 перегружен < < в том же .h, даже если они для различных объектов? Или я что-то испортил в своем коде?
Это частично работал, делая только константный BSTree :: Node * возвратила ошибку C4346. Мне пришлось делать const typename :: BSTree :: Node * out, чтобы ошибка исчезла. –
Moniker
2010-12-07 19:28:08