0

我无法访问以下向量。我对向量很陌生,所以这可能是我做错的一件小事。这是代码....

void spellCheck(vector<string> * fileRead)
{   
    string fileName = "/usr/dict/words";
    vector<string> dict;        // Stores file

    // Open the words text file
    cout << "Opening: "<< fileName << " for read" << endl;

    ifstream fin;
    fin.open(fileName.c_str());

    if(!fin.good())
    {
        cerr << "Error: File could not be opened" << endl;
        exit(1);
    }
    // Reads all words into a vector
    while(!fin.eof())
    {
        string temp;
        fin >> temp;
        dict.push_back(temp);
    }

    cout << "Making comparisons…" << endl;
    // Go through each word in vector
    for(int i=0; i < fileRead->size(); i++)
    {
        bool found = false;

        // Go through and match it with a dictionary word
        for(int j= 0; j < dict.size(); j++)
        {   
            if(WordCmp(fileRead[i]->c_str(), dict[j].c_str()) != 0)
            {
                found = true;   
            }
        }

        if(found == false)
        {
            cout << fileRead[i] << "Not found" << endl; 
        }
    }
}

int WordCmp(char* Word1, char* Word2)
{
    if(!strcmp(Word1,Word2))
        return 0;
    if(Word1[0] != Word2[0])
        return 100;
    float AveWordLen = ((strlen(Word1) + strlen(Word2)) / 2.0);

    return int(NumUniqueChars(Word1,Word2)/ AveWordLen * 100);
}

错误在行中

if(WordCmp(fileRead[i]->c_str(), dict[j].c_str()) != 0)

cout << fileRead[i] << "Not found" << endl;

问题似乎是,因为它以指针的形式出现,我用来访问它的当前语法无效。

4

4 回答 4

5

在指向向量的指针上使用[]不会调用std::vector::operator[]. 要随心所欲地调用std::vector::operator[],您必须有一个向量,而不是向量指针。

使用指向向量的指针访问向量的第 n 个元素的语法是(*fileRead)[n].c_str()

但是,您应该只传递对向量的引用:

void spellCheck(vector<string>& fileRead)

那么它只是:

fileRead[n].c_str()

于 2012-06-03T08:05:38.500 回答
1

您可以使用一元 * 从矢量* 中获取矢量&:

cout << (*fileRead)[i] << "Not found" << endl;
于 2012-06-03T08:05:31.977 回答
1

两种访问方式:

  • (*fileRead)[i]
  • fileRead->operator[](i)

改进方法的一种选择

  • 参考传递
于 2012-06-03T08:11:22.647 回答
0

您可以通过引用传递 fileRead,如下所示:

void spellCheck(vector<string> & fileRead)

或者当你像这样使用它时添加一个取消引用:

if(WordCmp( (*fileRead)[i]->c_str(), dict[j].c_str()) != 0)
于 2012-06-03T08:08:23.490 回答