范围内的向量问题

时间:2011-11-12 01:14:16

标签: c++ class

#include <iostream>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

class Dict
{
public:
    string line;
    int wordcount;
    string word;
    vector<string> words;
    Dict(string f)
    {
        ifstream myFile;
        myFile.open(f.c_str());
        if (myFile.is_open())
        {
            while(!myFile.eof())
            {
                myFile >> word;
                words.push_back(word);
            }
            cout << endl << "Wordcount: " << wordcount << endl;
        }
        else
            cout << "ERROR couldn't open file" << endl;
        myFile.close();
    }
};

int main()
{
    Dict d("test.txt");
    cout << words.size() << endl;
    return 0;
}

我收到一个错误,即单词vector没有在main()中声明。

如何让编译器看到它,因为我已经在类中定义了它。一旦对象被实例化并且调用了构造函数,是否应该创建单词向量?但是编译器没有注意到这一点。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

words是您Dict对象d中的成员:

int main() {
    Dict d("test.txt");
    cout << d.words.size();
    return 0;
}

答案 1 :(得分:1)

由于你可以拥有该类的多个对象,每个对象都有自己的words实例,编译器应该如何知道你的意思?

告诉编译器在哪里找到单词:

cout << d.words.size();

答案 2 :(得分:0)

您应该使用d.words,因为wordsd的成员。

在类中,每个成员(变量或函数)都属于一个对象。如果你有两个对象:

Dict d1("text1.txt");
Dict d2("text1.txt");

如果你的意思是words wordsd1,除非你说出来,否则编译器无法理解d2。你告诉它的方法是放置对象名称,然后是.,后跟成员名称。

d1.wordsd2.words是两个不同的向量。