错误:''''之前的'&'令牌
问题描述:
我在下面的标题中遇到了构造函数签名的问题。编译器给我的消息:错误:''''之前的'&'令牌
error: expected ')' before '&' token
但我不知道为什么会发生这种错误,我不认为原因是编译器指示。
#ifndef TextQuery
#define TextQuery
#include <fstream>
#include <map>
#include <memory>
#include <set>
#include <string>
#include <sstream>
#include <vector>
using std::ifstream;
using std::map;
using std::shared_ptr;
using std::set;
using std::string;
using std::istringstream;
using std::vector;
class TextQuery
{
public:
using line_no = vector<string>::size_type;
TextQuery(ifstream &); //!!!!error: expected ')' before '&' token
private:
shared_ptr<vector<string>> file; //input file
//map of each word to the set of the lines in which that word appears
map<string, shared_ptr<set<line_no>>> wm;
};
//read the input file and build the map of lines to line numbers
TextQuery::TextQuery(ifstream &is) : file(new vector<string>)
{
string text;
while(getline(is, text)) { //for each line in the file
file->push_back(text); //remember this line of text
int n = file->size() - 1; //the current line number
istringstream line(text); //separate the line into words
string word;
while(line >> word) { //for each word in that line
//if word isn't already in wm, subscripting adds a new entry
auto &lines = wm[word]; //lines id a shared_ptr
if(!lines) //that pointer is null the first time we see word
lines.reset(new set<line_no>); //allocate a new set
lines->insert(n); //insert this line number
}
}
}
#endif
答
提示:这里有什么问题?
#ifndef TextQuery
#define TextQuery
// ..
class TextQuery {
// ...
};
#endif
+0
解决问题的优雅方法:使用'#pragma once',或使用'#ifndef TextQuery_h'。 – PanicSheep
+0
非常感谢。在阅读你的答案后,我修复了我的代码。 –
@Barry在他们的回答中发布了[MCVE]。这就是我们期望的。 –
注意:如果您在C++(现在未使用)中使用关键字'register'作为接口方法名称,您会得到相同的错误。 –