错误:期望')'之前...(头文件构造函数)

时间:2016-02-09 13:26:55

标签: c++11

我有一个类词典

的头文件
#ifndef DICTIONARY_H
#define DICTIONARY_H

#include <string>
#include <vector>
#include <unordered_set>

class Dictionary {
public:
    Dictionary(string wordFile);
    bool contains(const string& word) const;
    vector<string> get_suggestions(const string& word) const;
private:
    unordered_set<string> words;
};

#endif

我收到错误&#34;错误:在'('token Dictionary :: Dictionary(string wordFile)&#34;之前预期的构造函数,析构函数或类型转换。在.cpp文件中看起来像这样:

#include <string>
#include <vector>
#include <fstream>
#include <iostream>
#include <algorithm>
#include "word.h"
#include "dictionary.h"
#include <unordered_set>
#include <string>

Dictionary::Dictionary(string wordFile) {
  string str;
  ifstream input(wordFile);

  while (getline(input, str)) {
    words.insert(str);
  }
}

bool Dictionary::contains(const string& word) const {
  unordered_set<string>::const_iterator got = words.find(word);
  if(got == words.end()){
    return false;
  }
  return true; 
}

vector<string> Dictionary::get_suggestions(const string& word) const {
  vector<string> suggestions;
  return suggestions;
}

我不知道出了什么问题......我来自Java背景,我在习惯用C ++编写并修复这些错误方面遇到了一些麻烦。

1 个答案:

答案 0 :(得分:0)

原始错误是因为您未在头文件中限定string

   Dictionary(string wordFile);

应该是:

Dictionary(std::string wordFile);

(以及标题中stringunordered_map的其他用法类似。)

你会在.cpp文件中遇到同样的问题,但只需将using namespace std;添加到文件顶部即可解决问题, 所有{{1>指令。 (您不应将#include放在头文件中,或者在包含头文件之前,因为它可能会产生不良后果并混淆以后的标题。)