سرفینا
جمعه 26 تیر 1388, 18:32 عصر
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>
#define nexthop(x) (nodeset[x].nh)
#define left(x) (nodeset[x].lc)
#define right(x) (nodeset[x].rc)
#define bound 32
typedef unsigned int word;
typedef word nexthop_t;
struct entryrec{
word data;
int len;
nexthop_t nexthop;
};
//*****************************************
class trienode{
friend class trie;
public:
nexthop_t nh;
trienode *lc;
trienode *rc;
} ;
//************************************************
class trie{
public:
static int m;
trienode *rootptr;
void insert(trie *root,word *prefix,int len,nexthop_t nh);
nexthop_t lookup(trie *root,word *prefix);
trie();
~trie(){delete rootptr;}
}t1;
//*************************************************
trie::trie()
{ static int m=0;
rootptr=new trienode;
rootptr->rc=NULL;
rootptr->lc=NULL;
rootptr->nh=NULL;
m++;
}
//**************************************************
nexthop_t trie::lookup(trie *root,word *prefix) {
nexthop_t h;
int i;
trienode *node;
h = NULL;
word *p;
p=prefix;
node=root->rootptr;
while (node!=NULL && p!=NULL) {
if (node->nh!=NULL)
h=node->nh;
if (*p== 0)
node=node->lc;
else node=node->rc;
p=p+1;
}
return h;
}
//********************************************
void trie::insert(trie *root,word *prefix,int len,nexthop_t nh){
int i;
trienode *node;
if (len > bound) {cout<<"trie::insert: prefix length exceeds bound.";}
node=root->rootptr;
i =0;
while (i<=len-1) {
if (*(prefix+i)== 0) {
if (node->lc == NULL) break;
node=node->lc;
} else {
if (node->rc == NULL) break;
node=node->rc;
}
i--;
}
// Extend the trie using remaining bits of prefix.
while (i<=len-1) {
if (*(prefix+i) == 0) {
node=new trienode; node=node->lc;
} else {
node=new trienode; node=node->rc;
}
m++;
node->lc=NULL;
node->rc=NULL;
node->nh=NULL;
i--;
}
node->nh=nh;
}
main()
{ word prefix;
int i,len;
nexthop_t nexthop;
entryrec entry[10];
for(i=0;i<=9;i++){
cout<< "enter";
cin>>entry[i].data;
cin>>entry[i].len;
cin>>entry[i].nexthop;
t1.insert(&t1,&entry[i].data,entry[i].len,entry[i].nexthop);
}
cout<<"enter a prefix to lookup & it's lenght";
cin>>prefix;
cin>>len ;
nexthop=t1.lookup(&t1,&prefix);
cout<<"\the nexthop is:"<<nexthop;
getch();
return 0;
}
Linking NONAME00.EXE:
Linker Error: Undefined symbol trie::m in module ..\..\DOCUME~1\BLUEROSE\DESKTOP\NONAME00.CPP
moteghayer m az nOe' static int ke 2 class trie tarif shode
:?
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>
#define nexthop(x) (nodeset[x].nh)
#define left(x) (nodeset[x].lc)
#define right(x) (nodeset[x].rc)
#define bound 32
typedef unsigned int word;
typedef word nexthop_t;
struct entryrec{
word data;
int len;
nexthop_t nexthop;
};
//*****************************************
class trienode{
friend class trie;
public:
nexthop_t nh;
trienode *lc;
trienode *rc;
} ;
//************************************************
class trie{
public:
static int m;
trienode *rootptr;
void insert(trie *root,word *prefix,int len,nexthop_t nh);
nexthop_t lookup(trie *root,word *prefix);
trie();
~trie(){delete rootptr;}
}t1;
//*************************************************
trie::trie()
{ static int m=0;
rootptr=new trienode;
rootptr->rc=NULL;
rootptr->lc=NULL;
rootptr->nh=NULL;
m++;
}
//**************************************************
nexthop_t trie::lookup(trie *root,word *prefix) {
nexthop_t h;
int i;
trienode *node;
h = NULL;
word *p;
p=prefix;
node=root->rootptr;
while (node!=NULL && p!=NULL) {
if (node->nh!=NULL)
h=node->nh;
if (*p== 0)
node=node->lc;
else node=node->rc;
p=p+1;
}
return h;
}
//********************************************
void trie::insert(trie *root,word *prefix,int len,nexthop_t nh){
int i;
trienode *node;
if (len > bound) {cout<<"trie::insert: prefix length exceeds bound.";}
node=root->rootptr;
i =0;
while (i<=len-1) {
if (*(prefix+i)== 0) {
if (node->lc == NULL) break;
node=node->lc;
} else {
if (node->rc == NULL) break;
node=node->rc;
}
i--;
}
// Extend the trie using remaining bits of prefix.
while (i<=len-1) {
if (*(prefix+i) == 0) {
node=new trienode; node=node->lc;
} else {
node=new trienode; node=node->rc;
}
m++;
node->lc=NULL;
node->rc=NULL;
node->nh=NULL;
i--;
}
node->nh=nh;
}
main()
{ word prefix;
int i,len;
nexthop_t nexthop;
entryrec entry[10];
for(i=0;i<=9;i++){
cout<< "enter";
cin>>entry[i].data;
cin>>entry[i].len;
cin>>entry[i].nexthop;
t1.insert(&t1,&entry[i].data,entry[i].len,entry[i].nexthop);
}
cout<<"enter a prefix to lookup & it's lenght";
cin>>prefix;
cin>>len ;
nexthop=t1.lookup(&t1,&prefix);
cout<<"\the nexthop is:"<<nexthop;
getch();
return 0;
}
Linking NONAME00.EXE:
Linker Error: Undefined symbol trie::m in module ..\..\DOCUME~1\BLUEROSE\DESKTOP\NONAME00.CPP
moteghayer m az nOe' static int ke 2 class trie tarif shode
:?