Error: Invalid declarator before '& token

I tried to write a TextQuery program that allows the user to:
1. enter the word
2. reads a file
3. Displays which lines the words appear and how many times the word appears in this line .

I created a class called "TextQuery" with three member functions:
1. "read_file" to read the file and return the link to the vector
2. "find_word" to search for a word

then returns a link to the map int, pair>
( 1st "int" is the line number, 2nd "int" is the number of times the word occurs in this line, the line is the entire line)
3. "write_out" to write the result.

However, when I compiled the program, I received this message:

/home/phongcao/C++/textquery_class_1.cc:21: error: invalid declarator before '&' token 


I'm just wondering, how can the declarant be wrong? Here is the class definition section:

 #include <iostream> #include <fstream> #include <algorithm> #include <map> #include <vector> #include <string> using namespace std; class TextQuery { public: vector<string> &read_file(ifstream &infile) const; map< int, pair<string, int> > &find_word(const string &word) const; void write_out(const string &word) const; private: vector<string> svec; map< int, pair<string, int> > result; } //The following line is line 21, where I got the error!! vector<string> &TextQuery::read_file(ifstream &infile) const { while (getline(infile, line)) { svec.push_back(line); } return svec; } map< int, pair<string, int> > &TextQuery::find_word(const string &word) const { for (vector<string>::size_type i = 0; i != svec.end()-1; ++i) { int rep_per_line = 0; pos = svec[i].find(word, 0); while (pos != string::npos) { if (!result[i+1]) { result.insert(make_pair(i+1, make_pair(svec[i], rep_per_line))); ++result[i+1].second; } else { ++result[i+1].second; } } } return result; } void TextQuery::write_out(const string &word) { cout << " The word " << "'" << word << "'" << " repeats:" << endl; for (map< int, pair<string, int> >::const_iterator iter = result.begin(); iter != result.end(); ++iter) { cout << "(line " << (*iter).first << " - " << (*iter).second.second << " times): "; cout << result.second.first << endl; } } 



And here is the rest of the program:

 int main() { string word, ifile; TextQuery tq; cout << "Type in the file name: " << endl; cin >> ifile; ifstream infile(ifile.c_str()); tq.read_file(infile); cout << "Type in the word want to search: " << endl; cin >> word; tq.find_word(word); tq.write_out(word); return 0; } 


Thanks for answering my question!

+6
c ++ stl g ++ compiler-errors syntax-error
source share
2 answers

Absent ; after class definition.

Why a weird error message? Since it is completely legal to create an object at this level of visibility:

 class ABC { ... } globalABC; 
+16
source share

There is another mistake - the read_file method read_file declared as const , so you cannot call the constant vector::push_back ( svec.push_back(line); ) in it

+2
source share

All Articles