使用文件初始化静态成员

时间:2016-01-22 23:16:03

标签: c++ arrays static fstream

我有一个字典类,用于拼写检查。我有一个数组作为单词列表,我必须用一个文件初始化它,其中有单词。 我的问题是,我需要我的wordlist变量是一个静态变量,因为只有一个变量足以用于从字典类创建的任何其他额外对象并且它是合乎逻辑的,但是不需要该类的第二个对象,但如果我们需要多个对象呢?有办法吗?

#ifndef DICTIONARY_H
#define DICTIONARY_H

class Dictionary
{
public:
    static const int SIZE = 109582;
    Dictionary();
    bool lookUp(const char *)const;
private:
    void  suggestion(const char *)const;
    char *wordList[SIZE];
};

#endif

wordlist必须是静态的......

我只能想到这种定义...

  Dictionary::Dictionary()
    {
        ifstream inputFile("wordsEn.txt", std::ios::in);

        if (!inputFile)
        {
            cerr << "File could not be opened." << endl;
            throw;
        }

        for (int i = 0; i < SIZE && !inputFile.eof(); ++i)
        {
            wordList[i] = new char[32];
            inputFile >> wordList[i];
        }
    }

1 个答案:

答案 0 :(得分:1)

有很多方法可以解决编程问题。

这是我的建议:

static成员移出课堂。

class Dictionary
{
   public:
      Dictionary();
      bool lookUp(const char *)const;
   private:
      void  suggestion(const char *)const;
};

在.cpp文件中,使用:

static const int SIZE = 109582;
static std::vector<std::string> wordList(SIZE);

static int initializeWordList(std::string const& filename)
{
   // Do the needul to initialize the wordList.
}

Dictionary::Dictionary()
{
   static int init = initializeWordList("wordsEn.txt");
}

这将确保单词列表仅初始化一次,无论您创建的Dictionary实例如何。