谢谢。我试了,你的例子是正确的。
但我还是不知道我为什么是错的。我感觉我的代码和你的是一样的。但我的代码始终有错:
程序代码:
class TextQuery {
public:
//将this所指向的某一块内存中的每个字节的内容全部设置为ASCII值0, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。
TextQuery() { memset( this, 0, sizeof( TextQuery )); }
~TextQuery(){ delete _line_cnt; }
static void filter_elements( string felems ) { filt_elems = felems; }
void query__text();
void display_map_text();
void display_text_locations();
void display_solution();
void build_text_map()//// 原来 的 doit()
{
retrieve_text();
separate_words();
filter_text();
suffix_text();
strip_caps();
build_word_map();
//all_locs();
}
static void line_cnt(text_loc*); //为了设置AndQuery静态成员,所有单词的最大列数 的静态成员函数
private:
void retrieve_text();
void separate_words();
void filter_text();
void strip_caps();
void suffix_text();
void suffix_s( string& );
void build_word_map();
private:
vector<string> *lines_of_text;
text_loc *text_locations; //所有单词和所有单词的行列位置 typedef pair<text*,loc*> text_loc;
map< string,loc*> *word_map;
static const vector<int>* _line_cnt; //为了AndQuery准备的静态成员 所有单词的最大列数
static string filt_elems;
Query* query; //为了 TextQuery.cpp中的一条语句 query->eval(); !!!!1而加了数据成员。构造函数中还没有涉及。
};
void TextQuery::line_cnt(text_loc* words_and_locs) //为了设置AndQuery静态成员,所有单词的最大列数 的静态成员函数
{
//typedef pair<text*,loc*> text_loc;
//typedef vector<location> loc;
loc* p_locs=words_and_locs->second;//获取所有单词的行列位置
loc::iterator iter=p_locs->begin(),iter_end=p_locs->end();
vector<int> line_cnt_temp;
while(iter != iter_end)
{
line_cnt_temp.push_back((*iter).second);
iter++;
}
_line_cnt = new vector<int> (line_cnt_temp.begin(),line_cnt_temp.end());
}
--------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW--------------------
检查文件依赖性...
正在编译 D:\我的文档\TextQuery\main.cpp...
正在连接...
[Error] D:\我的文档\TextQuery\TextQuery.cpp:16: undefined reference to `TextQuery::_line_cnt'
[Error] D:\我的文档\TextQuery\TextQuery.cpp:205: undefined reference to `NotQuery::all_locs
构建中止 main: 6 个错误, 0 个警告
我只写出了前两个错误