Scope probleem met vector in de klas

#include 
#include 
#include 
#include 

using namespace std;

class Dict
{
public:
    string line;
    int wordcount;
    string word;
    vector 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;
}

Ik krijg een foutmelding dat de woordenvector niet in main is gedeclareerd ().

Hoe kan ik dit zichtbaar maken voor de compiler, omdat ik het al in de klas heb gedefinieerd. Zodra een object is geïnstantieerd en de constructor wordt aangeroepen, mag er dan geen vector voor woorden worden gemaakt? Maar de compiler merkt dit niet.

Hoe kan ik dit oplossen?

0

3 antwoord

words is a member in your Dict object d:

int main() {
    Dict d("test.txt");
    cout << d.words.size();
    return 0;
}
4
toegevoegd
^^ Ik voel me een idioot ..
toegevoegd de auteur CyberShot, de bron

Aangezien u verschillende objecten van die klasse zou kunnen hebben, elk met een eigen instantie van woorden , hoe zou de compiler dan moeten weten welke u bedoelt?

Vertel de compiler waar de woorden te vinden zijn:

cout << d.words.size();
1
toegevoegd

U moet d.words gebruiken omdat woorden lid is van d .

In klassen behoort elk lid, variabel of functie, tot een object. Als je twee objecten hebt:

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

Dan is er geen manier voor de compiler om te begrijpen met woorden als je bedoelt woorden in d1 of d2 tenzij je vertel het. De manier waarop je het vertelt is om de objectnaam te plaatsen, gevolgd door . gevolgd door de naam van het lid.

Dat is d1.words en d2.words zijn twee verschillende vectoren.

0
toegevoegd