在C+中使用模板时出错+; 我想用C++中的模板实现一个AVL树。头文件、C++文件和主文件如下:
AVLTree.h在C+中使用模板时出错+; 我想用C++中的模板实现一个AVL树。头文件、C++文件和主文件如下:,c++,class,templates,header-files,avl-tree,C++,Class,Templates,Header Files,Avl Tree,AVLTree.h #include <iostream> using namespace std; namespace MYTree { template <class T> class AVLTree { public: struct AVLNode { struct AVLNode *left; struct A
#include <iostream>
using namespace std;
namespace MYTree
{
template <class T>
class AVLTree
{
public:
struct AVLNode
{
struct AVLNode *left;
struct AVLNode *right;
struct AVLNode *parent;
int balanceFactor;
};
//Constructor
AVLTree();
//Variables
AVLNode *root;
//Methods
AVLNode<T> *lookup(const T &key);
AVLNode<T> *insert(const T &key);
void remove(const T &key);
};
}
编辑:
main.cpp:9: error: `AVLTree' undeclared (first use this function)
main.cpp:9: error: (Each undeclared identifier is reported only once for each function it appears in.)
main.cpp:9: error: expected primary-expression before "int"
main.cpp:9: error: expected `;' before "int"
我第一次使用模板。有人能帮我吗?你用的是
AVLNode
,但是AVLNode
不是一个模板,正如消息所说。你用的是AVLNode
但是AVLNode
不是一个模板,正如消息所说。您使用的是AVLNode
,但是AVLNode
不是一个模板,正如消息所说。AVLNode
不是一个模板;它是嵌套在模板中的常规类。因此,在模板中,只需使用类名:
AVLNode *lookup(const T &key);
在模板之外,使用模板的范围对其进行限定:
template <class T>
AVLTree<T>::AVLNode* AVLTree<T>::lookup(const T &key)
{
}
如注释中所述,模板(包括类模板的成员函数)通常需要在标题中定义,因为该定义必须在使用它的任何地方都可用
您还需要确保定义位于正确的命名空间中,并在不在该命名空间中时适当地限定模板名称(MYTree::AVLNode
)
AVLTree树()代码>声明一个函数;删除()
以创建默认的初始化对象
最后,不要使用命名空间std执行全局命名空间中的code>,因为它可能会导致混淆的名称冲突。AVLNode
不是模板;它是嵌套在模板中的常规类。因此,在模板中,只需使用类名:
AVLNode *lookup(const T &key);
在模板之外,使用模板的范围对其进行限定:
template <class T>
AVLTree<T>::AVLNode* AVLTree<T>::lookup(const T &key)
{
}
如注释中所述,模板(包括类模板的成员函数)通常需要在标题中定义,因为该定义必须在使用它的任何地方都可用
您还需要确保定义位于正确的命名空间中,并在不在该命名空间中时适当地限定模板名称(MYTree::AVLNode
)
AVLTree树()代码>声明一个函数;删除()
以创建默认的初始化对象
最后,不要使用命名空间std执行全局命名空间中的code>,因为它可能会导致混淆的名称冲突。AVLNode
不是模板;它是嵌套在模板中的常规类。因此,在模板中,只需使用类名:
AVLNode *lookup(const T &key);
在模板之外,使用模板的范围对其进行限定:
template <class T>
AVLTree<T>::AVLNode* AVLTree<T>::lookup(const T &key)
{
}
如注释中所述,模板(包括类模板的成员函数)通常需要在标题中定义,因为该定义必须在使用它的任何地方都可用
您还需要确保定义位于正确的命名空间中,并在不在该命名空间中时适当地限定模板名称(MYTree::AVLNode
)
AVLTree树()代码>声明一个函数;删除()
以创建默认的初始化对象
最后,不要使用命名空间std执行全局命名空间中的code>,因为它可能会导致混淆的名称冲突。AVLNode
不是模板;它是嵌套在模板中的常规类。因此,在模板中,只需使用类名:
AVLNode *lookup(const T &key);
在模板之外,使用模板的范围对其进行限定:
template <class T>
AVLTree<T>::AVLNode* AVLTree<T>::lookup(const T &key)
{
}
如注释中所述,模板(包括类模板的成员函数)通常需要在标题中定义,因为该定义必须在使用它的任何地方都可用
您还需要确保定义位于正确的命名空间中,并在不在该命名空间中时适当地限定模板名称(MYTree::AVLNode
)
AVLTree树()代码>声明一个函数;删除()
以创建默认的初始化对象
最后,不要使用命名空间std执行全局命名空间中的代码>,因为它可能会导致混淆的名称冲突。:
struct AVLnode
{
...
}Node;
您可以声明一个名为Node
的成员变量
你以后什么时候做
typedef struct Node AVLNode;
尝试将成员变量用作结构
记住,您在编程C++,其中结构名称可以用作与类名相同的类型。
您还可以尝试使用AVLNode
作为模板,例如
AVLNode<T> *lookup(const T &key);
AVLNode*查找(const T&key);
但是正如错误消息所说,AVLNode
结构不是模板结构。如下:
struct AVLnode
{
...
}Node;
您可以声明一个名为Node
的成员变量
你以后什么时候做
typedef struct Node AVLNode;
尝试将成员变量用作结构
记住,您在编程C++,其中结构名称可以用作与类名相同的类型。
您还可以尝试使用AVLNode
作为模板,例如
AVLNode<T> *lookup(const T &key);
AVLNode*查找(const T&key);
但是正如错误消息所说,AVLNode
结构不是模板结构。如下:
struct AVLnode
{
...
}Node;
您可以声明一个名为Node
的成员变量
你以后什么时候做
typedef struct Node AVLNode;
尝试将成员变量用作结构
记住,您在编程C++,其中结构名称可以用作与类名相同的类型。
您还可以尝试使用AVLNode
作为模板,例如
AVLNode<T> *lookup(const T &key);
AVLNode*查找(const T&key);
但是正如错误消息所说,AVLNode
结构不是模板结构。如下:
struct AVLnode
{
...
}Node;
您可以声明一个名为Node
的成员变量
你以后什么时候做
typedef struct Node AVLNode;
尝试将成员变量用作结构
记住,您在编程C++,其中结构名称可以用作与类名相同的类型。
您还可以尝试使用AVLNode
作为模板,例如
AVLNode<T> *lookup(const T &key);
AVLNode*查找(const T&key);
但正如错误消息