注册 登录
编程论坛 C++教室

大家帮我解决一下C++问题

specilize 发布于 2011-04-12 13:11, 894 次点击
我定义了一个名为TextQuery的类,在类的头文件中public部分我用了
typedef vector<string>::size_type line_no;
该类中有一个为const set<line_no>& run_query(const string&) const;的成员函数
但是,当我在实现文件中编写这个函数时,我用
const set<line_no>& run_query(const string&) const;
{、、、、、、}
提示错误
d:\c++\第十章\文本综合查询程序\文本综合查询程序\textquery.cpp(21) : error C2065: “line_no”: 未声明的标识符
d:\c++\第十章\文本综合查询程序\文本综合查询程序\textquery.cpp(22) : error C2556: “const std::set &TextQuery::run_query(const std::string &) const”: 重载函数与“const std::set<_Kty> &TextQuery::run_query(const std::string &) const”只是在返回类型上不同
        with
        [
            _Kty=TextQuery::line_no
        ]
        d:\c++\第十章\文本综合查询程序\文本综合查询程序\textquery.h(24) : 参见“TextQuery::run_query”的声明
d:\c++\第十章\文本综合查询程序\文本综合查询程序\textquery.cpp(22) : error C2371: “TextQuery::run_query”: 重定义;不同的基类型
        d:\c++\第十章\文本综合查询程序\文本综合查询程序\textquery.h(24) : 参见“TextQuery::run_query”的声明
d:\c++\第十章\文本综合查询程序\文本综合查询程序\textquery.cpp(37) : error C2264: “TextQuery::run_query”: 函数定义或声明中有错误;未调用函数
生成日志保存在“file://d:\C++\第十章\文本综合查询程序\文本综合查询程序\Debug\BuildLog.htm”
文本综合查询程序 - 4 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
但是如果我改为
const set<TextQuery:line_no>& run_query(const string&) const;
却可以通过,请高手帮我解释一下
5 回复
#2
specilize2011-04-12 13:41
另外一个问题,和上面同属一道的
void TextQuery::print_result(const string &find_word) const
{
    set<line_no> set=run_query(find_word);
    set<line_no>::iterator  iter=set.begin();
    if(set.size()==0)
        cout<<"Cant not find<<find_word<< "<<endl;
    else
        if(set.size()==1)
            cout<<find_word<<"occurs one time"<<endl;
        else
            cout<<find_word<<"occurs "<<set.size()<<"times"<<endl;
    while(iter!=set.end())
        cout<<"(line "<<(*iter)+1<<") :"<<text_line(*(iter++))<<endl;
}
这段代码会提示错误,但是如果我把set<line_no>::iterator  iter=set.begin();改为
std::set<line_no>::iterator  iter=set.begin();就不会,为什么,说明一下,我在头文件中是有使用std命名空间的

#3
wangjunit2011-04-12 17:11
估计是作用域问题
#4
lucky5635912011-04-13 07:46
这个还真没有了解过
#5
rjsp2011-04-13 08:04
没代码,没真相
#6
debroa7232011-04-13 22:01
typedef vector<string>::size_type line_no;改为
typedef std::vector<string>::size_type line_no;
或者在开头的文件中用 using spacename std;来声明作用域。
1