我想在模板BSTree.h中創建兩個重載操作符,並且遇到了錯誤,它們確實不會告訴我問題是什麼。單獨或聯合運行錯誤代碼的搜索沒有爲我帶來任何東西。無法聲明2個朋友重載<<在模板中.h
第一個重載< <爲BSTree不會導致編譯任何錯誤,但第二次超載< <我爲我的節點結構建立保持返回以下錯誤:
錯誤C4430:缺少類型說明符 - 假設爲int。注意:C++不支持默認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*&);
};
編譯器說,發生在這裏的節點超載< <代碼行中的錯誤。
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即使它們是不同的對象?或者我在我的代碼中搞了些什麼?
這部分的工作,這樣做只是常量BSTree ::節點*返回C4346錯誤。我不得不做const const typename :: BSTree ::節點*出來讓錯誤消失 –
Moniker
2010-12-07 19:28:08