0
我很难找到一个简单的解决方案。我正在使用以下类实现表达式树,我声明了Tree类的一个友元函数。当我尝试以main开始时,我的问题就出现了。访问主类中的模板好友功能。
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没有在这个范围内声明。” 我也得到,“错误:期望的构造函数,析构函数或类型转换之前?代码” 在此代码的第二行。 任何人都有任何指针?
是的,我了解命名。尽管我有一位奇怪的教授。哈哈。这个函数实际上是无效返回的。所以我已经更新该行: 模板<类对象>无效expTree(树
另请注意,内联函数只能通过ADL访问,我不知道如果有上10尽管如此。 –
关于您未定义的引用错误 - 您尚未在编译器/链接程序可以找到它的任何位置定义expTree函数。 –