私はこのための簡単な解決策を見つけるのに苦労しています。私は次のクラスを使って式ツリーを実装しています。クラスツリーのfriend関数を宣言します。私の問題は、私がメインで始めることを試みるときに来る。メインのクラスのテンプレートフレンド機能へのアクセス。
template<class object> class Tree;
template<class object> Tree<object>::expTree(Tree<object> *&T); // ERROR
template<class object>
struct Node
{
object info;
Node *next;
Node<object>():info(0), next(NULL) {}
Node<object>(const object &element, Node *n = NULL):
info(element), next(n){}
};
template<class object>
class Stack
{
public:
Stack();
~Stack();
void makestackempty();
bool stackEmpty() const;
void push(object &item);
void pop (object &item);
void printStack() const;
private:
Node<object> *top;
};
template<class object>
struct TreeNode
{
object info;
TreeNode *right;
TreeNode *left;
TreeNode()
{}
};
template<class object>
class Tree
{
private:
TreeNode<object> *root;
public:
Tree();
~Tree();
Tree(const Tree<object> &rhs); // copy
void operator=(const Tree<object> &rhs);
void copyconst(TreeNode<object> *orig, TreeNode<object> *&rhs);
void makeEmpty(TreeNode<object> *&tree);
bool isEmpty()const;
friend Tree<object> expTree(Tree<object> *&T){
buildTree(T.root);
};
void buildTree(TreeNode<object> *&tree);
void printTree(TreeNode<object> *&tree)const;
};
主に「エラー:expTreeがこのスコープで宣言されていません」と表示されます。 私はまた、 "このコードの2行目の"エラー:予想されるコンストラクタ、デストラクタ、または型変換の前に " " 誰もがポインタを持っていますか?
はい、わかりました。私は奇妙な教授を持っています。ハハ。この関数は実際にはvoidを返します。 テンプレート<クラスオブジェクト>のボイドexpTree(木
インラインフレンド機能は、ADLを使用してのみアクセスできます。前にしかし、その定義。 –
定義されていない参照エラーについて - コンパイラ/リンカーが見つけることができるところでは、定義されたexpTree関数を使用できません。 –