J'essaie de créer deux opérateurs surchargés dans un modèle BSTree.h et je rencontre des erreurs qui ne me disent vraiment pas quel est le problème. Lancer une recherche sur les codes d'erreur séparément ou conjointement n'a rien donné pour moi.Impossible de déclarer 2 amis surchargés << dans un modèle .h
La première surchargée < < pour la BSTree ne cause aucune erreur sur la compilation, mais le 2ème surchargée < < j'ai créé pour mon struct Node revient sans cesse les erreurs suivantes:
erreur C4430: Type manquant spécificateur - int supposé. Note: C++ ne prend pas en charge par défaut-int
erreur C2143: erreur de syntaxe: manquant '' avant '*'
#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*&);
};
Le compilateur dit que les erreurs se produisent à la ligne où le code nœud surchargé < < est.
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;
}
suis-je pas le droit de déclarer 2 surchargées < < dans le même .h même si elles sont des objets différents? Ou est-ce que je me trompe dans mon code?
Cette partie a travaillé, en faisant simplement const BSTree :: node * renvoyé une erreur de C4346. J'ai dû faire const typename :: BSTree :: Node * out pour faire disparaître l'erreur –
Moniker
@Moniker: Ah, j'ai oublié que 'BSTree' est un modèle. Un autre brainfart à moi, le second aujourd'hui ici. Je suis désolé. Je suis content que tu t'en sors malgré tout. Je vais corriger ma réponse de toute façon, celui qui trébuche là-dedans ne devrait pas avoir à lire les commentaires pour obtenir de l'aide. – sbi