#include <iostream>
#include<string>
//包含顺序容器的头文件.
#include <vector>
#include<list>
#include<deque>
//包含容器适配器的头文件.
#include<stack>
//包含关联容器的头文件.
#include<map>
#include<set>
using namespace std;
class Textquery
{
public:
typedef std::vector<std::string>::size_type line_no;
void read_file(std::ifstream &is)
{store_file(is);build_map();}
std::set<line_no> run_query(const std::string&) const;
std::string text_line(line_no) const;
private:
void store_file(std::ifstream&);
void build_map();
std::vector<std::string> lines_of_text;
std::map<std::string,std::set<line_no>> word_map;
}
void Textquery::store_file(ifstream &is)
{
string textline;
getline(is,textline);
以上代码,到了getline的时候提示说没有这个版本的重载函数,可是我是照抄C++ PRIMER上的啊?为啥会出错?
}
一个C++关于编写成员函数的问题。
答案:2 悬赏:40
解决时间 2021-03-12 09:42
- 提问者网友:花之森
- 2021-03-11 14:18
最佳答案
- 二级知识专家网友:闲懒诗人
- 2021-03-11 14:40
getline 这个函数的参数你传错了,有连个getline的模板函数,他们分别是:
1 istream& getline ( istream &is , string &str , char delim );
参数
is 进行读入操作的输入流 str 存储读入的内容 delim 终结符
返回值
与参数is是一样的
功能
将输入流is中读到的字符存入str中,直到遇到终结符delim才结束。对于第一个函数delim是可以由用户自己定义的终结符;对于第二个函数delim默认为 '\n'(换行符)。 函数在输入流is中遇到文件结束符(EOF)或者在读入字符的过程中遇到错误都会结束。 在遇到终结符delim后,delim会被丢弃,不存入str中。在下次读入操作时,将在delim的下个字符开始读入。 举例: int main() { string str; getline(cin,str,'#'); char c=getchar(); cout<<str<<' '<<c<<endl; return 0; } 输入为:aa#b 输出为:aa b
2 cin.getline(char* cha,int num,char f);
参数:cha 读取的字符串
num 个数
f 结束符
1 istream& getline ( istream &is , string &str , char delim );
参数
is 进行读入操作的输入流 str 存储读入的内容 delim 终结符
返回值
与参数is是一样的
功能
将输入流is中读到的字符存入str中,直到遇到终结符delim才结束。对于第一个函数delim是可以由用户自己定义的终结符;对于第二个函数delim默认为 '\n'(换行符)。 函数在输入流is中遇到文件结束符(EOF)或者在读入字符的过程中遇到错误都会结束。 在遇到终结符delim后,delim会被丢弃,不存入str中。在下次读入操作时,将在delim的下个字符开始读入。 举例: int main() { string str; getline(cin,str,'#'); char c=getchar(); cout<<str<<' '<<c<<endl; return 0; } 输入为:aa#b 输出为:aa b
2 cin.getline(char* cha,int num,char f);
参数:cha 读取的字符串
num 个数
f 结束符
全部回答
- 1楼网友:陪衬角色
- 2021-03-11 14:58
不知道是书上错了,还是你抄错了。
1. 没有包含fstream库,#include<fstream>
2. class Textquery {...}后面没有分号
下面是修改后的代码:
#include <iostream>
#include <fstream>
#include<string>
//包含顺序容器的头文件.
#include <vector>
#include<list>
#include<deque>
//包含容器适配器的头文件.
#include<stack>
//包含关联容器的头文件.
#include<map>
#include<set>
using namespace std;
class Textquery
{
public:
typedef std::vector<std::string>::size_type line_no;
void read_file(std::ifstream &is)
{store_file(is);build_map();}
std::set<line_no> run_query(const std::string&) const;
std::string text_line(line_no) const;
private:
void store_file(std::ifstream&);
void build_map();
std::vector<std::string> lines_of_text;
std::map<std::string,std::set<line_no> > word_map;
};
void Textquery::store_file(ifstream &is)
{
string textline;
getline(is,textline);
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯