erreur: invalid déclaration avant ‘&’ token

J'étais en train d'écrire un TextQuery programme qui permettra à l'utilisateur:

1. entrées un mot

2. lit un fichier

3. imprime des lignes les mots semblent et combien de fois le mot apparaît sur la ligne.

J'ai créé une catégorie appelée "TextQuery" avec 3 fonctions de membre:

1. "read_file" pour lire le fichier et renvoyer une référence à un vecteur

2. "find_word" de prendre la parole doit être recherché

puis renvoie une référence à un map< int, paire >

(le 1er 'int' est le numéro de la ligne, le 2ème 'int' est le nombre de fois où le mot se trouve sur cette ligne, la 'chaîne' est l'ensemble de la ligne)

3. "write_out" pour écrire le résultat.

Cependant, lorsque j'ai compilé le programme, j'ai eu ce message:

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

Je me demande juste comment la déclaration de mal? Voici la définition de la classe de la 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; 
}
}

Et voici le reste du programme:

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;
}


Merci de répondre à ma question!!

  • Pourquoi êtes-vous de retour lorsque, dans les deux cas, la valeur de retour n'est pas collectées ?
InformationsquelleAutor phongvcao | 2011-04-01