Dear friends,
I'd problem in vc++. The problem is i want to call the static method of a class in another header file. But if im calling it is giving linking error
error LNK2001: unresolved external symbol
The program is as under. I want to call the static word_map method of UserQuery class present in UserQuery.h file from TextQuery class present in TextQuery.h header file. But it is giving linking error.I also tried including UserQuery. h in TextQuery header file, but it is saying redeclaration.How to solve the problem. Please help me.
Thanking you,
yours sincerely,
bhadram
UserQuery.h
# include <iostream>
# include <vector>
# include <map>
# include <stack>
# include <string>
using namespace std;
typedef pair<short,short> Location;
class UserQuery
{
private:
vector<string>* _query;
enum QueryType{WORD=1,AND,OR,NOT,RPAREN,LPAREN};
QueryType evalQueryString(const string& query);
void evalWord(const string&);
public:
static map<string,vector<Location>*,less<string> >* _word_map;
void query(vector<string>* pq);
void eval_query();
static void word_map(map<string,vector<Location>*,less<string> >* wm)
{
_word_map=wm;
}
};
void UserQuery::evalWord(const string& query)
{
cout<<"user query"<<query;
/*NameQuery *pq;
vector<Location> *ploc;
if(!_word_map->count(query))
{
pq=new NameQuery(query);
}
else
{
ploc=(*_word_map)[query];
pq=new NameQuery(query,*ploc);
}*/
//pq.display();
}
inline void UserQuery::query(vector<string>* pq)
{
_query=pq;
eval_query();
}
inline void UserQuery::eval_query()
{
vector<string>::iterator it=_query->begin(),it_end=_query->end();
for(;it!=it_end;it++)
{
QueryType qt=evalQueryString(*it);
switch( qt)
{
case WORD:
evalWord( *it );
break;
case AND:
//evalAnd();
break;
case OR:
//evalOr();
break;
case NOT:
//evalNot();
break;
case LPAREN:
//++_paren;
//++_lparenOn;
break;
case RPAREN:
//--_paren;
//++_rparenOn;
//evalRParen();
break;
}
}
}
UserQuery::QueryType
UserQuery::
evalQueryString( const string &query )
{
if ( query == "&&" )
return AND;
if ( query == "||" )
return OR;
if ( query == "!" )
return NOT;
if ( query == "(" )
return LPAREN;
if ( query == ")" )
return RPAREN;
return WORD;
}
TextQuery.h file:
# include <UserQuery.h>
# include <iostream>
# include <fstream>
# include <vector>
# include <map>
# include <set>
# include <string>
using namespace std;
typedef vector<string> vecString;
typedef pair<short,short> Location;
typedef pair<vecString*,vector<Location>* > Locations;
class TextQuery
{
private:
vector<string>* lines_of_text;
Locations* word_locations;
map<string,vector<Location>*,less<string> >* word_map;
void retreive_text();
void seperate_words();
void filter_text();
void strip_caps();
void suffix_text();
void suffix_s(string&);
void build_word_map();
public:
void build_up_text()
{
retreive_text();
seperate_words();
filter_text();
strip_caps();
suffix_text();
build_word_map();
}
void display_word_map();
void query_text();
void init_query_statics();
};
inline void TextQuery::init_query_statics()
{
UserQuery::word_map(word_map);
}
cpp file:
# include <TextQuery.h>
int main()
{
TextQuery tq;
tq.build_up_text();
tq.query_text();
//tq.display_word_map();
return 0;
}
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com |