C++ 模板 二叉树实现的map 编译不过,请问是什么原因?

论坛 期权论坛 期权     
meng_chaoming   2018-4-28 02:21   10743   4
/*
* average.cpp
* ------------
* This program adds scores and prints their average.
*/
#include "simpio.h"
#include
#include "error.h"
#include "random.h"

/*
#ifdef _MAP_H
#define _MAP_H
*/

template key =key;
  n->value =value;
  n->left = n->right = NULL;
}
else if( key == n->key)
{
   n->value = value;
}
else if(key < n->key)
{
  treeEnter(n->left,key,value);
}
else
  treeEnter(n->right,key,value);

}
template
void map::Insert(KeyType key,ValType value){
  return treeEnter(root,key,value);
}

//#endif

int main(int argc, char **argv)
{
map *a = new map();
for(int i = 0 ;iInsert(randomInteger(1,10000),randomInteger(1,10000));
}
a->PrintMap();
system("pause");
return 0;
}

错误 4 error C2065: “KeyType”: 未声明的标识符
错误 5 error C2065: “ValType”: 未声明的标识符展开
分享到 :
0 人收藏

4 个回复

倒序浏览
2#
物理公司的  4级常客 | 2018-4-30 01:12:50
node*  map::treeSearch(node *n,KeyType key)这个函数放到类里面定义
也可以把node的定义放在外面,不过他也要template,很麻烦
放在里面吧
3#
elichn  4级常客 | 2018-4-30 01:12:51
node*聽聽map::treeSearch(node聽*n,KeyType聽key)
{
  if(n->key聽==聽key)
   return聽n;
  if(n==NULL)聽return聽NULL;
  else
  {
   if(keyvalue)
   {
聽聽聽聽  treeSearch(n->left,聽key);
   }
   else
   {
    treeSearch(n->right,聽key);
   }
  }

}这个函数放到类里面定义,不要放在类外面,最终修改如下:






template聽
class聽map
{
public:
map();
~map();
void聽PrintMap();
void聽Insert(KeyType聽key,ValType聽value);
bool聽Remove(KeyType聽key);
ValType聽GetValue(KeyType聽key);
int聽size();
bool聽IsContain(KeyType聽key);

struct聽node{
  KeyType聽key;
  ValType聽value;
  node*聽left,*right;
};

private:

node*聽root;
//node*聽treeSearch(node聽*n,KeyType聽key);
void聽treeEnter(node聽*聽&n,KeyType聽key,ValType聽value);
void聽PrintMap(node聽*聽root);

node*聽聽map::treeSearch(node聽*n,KeyType聽key)
{
  if(n->key聽==聽key)
   return聽n;
  if(n==NULL)聽return聽NULL;
  else
  {
   if(keyvalue)
   {
聽聽聽聽  treeSearch(n->left,聽key);
   }
   else
   {
    treeSearch(n->right,聽key);
   }
  }

}

//DISALLOW_COPY(map);
};
template聽
void聽map::PrintMap()
{
PrintMap(root);
}

template聽
聽map::map()
{
root聽=聽NULL;
}
template聽
聽map::~map()
{
}
template聽
void聽聽map::PrintMap(node聽*聽root)
{
if(root聽!=NULL)
{
  std::coutkey)
{
  聽n->value聽=聽value;
}
else聽if(key聽key)
{
  treeEnter(n->left,key,value);
}
else
  treeEnter(n->right,key,value);

}
template聽
void聽map::Insert(KeyType聽key,ValType聽value){
  return聽treeEnter(root,key,value);
}

//#endif

int聽main(int聽argc,聽char聽**argv)
{
map聽*a聽=聽new聽map();
for(int聽i聽=聽0聽;iInsert(randomInteger(1,10000),randomInteger(1,10000));
}
a->PrintMap();
system("pause");
return聽0;
}

由于你给的也不是全部代码,剩下的问题需要你按如上修改后再看一下还有什么问题。也许问题不是出在你给的上述代码中。
4#
hu0904  3级会员 | 2018-4-30 01:12:52
node 的定义出了问题 ,在类外引用类中类的名称需要带名字域
5#
吉原1006  2级吧友 | 2018-4-30 01:12:53
声明一下不就完了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP