#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()中声明。
如何让编译器看到它,因为我已经在类中定义了它。一旦对象被实例化并且调用了构造函数,是否应该创建单词向量?但是编译器没有注意到这一点。
我该如何解决这个问题?
答案 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
,因为words
是d
的成员。
在类中,每个成员(变量或函数)都属于一个对象。如果你有两个对象:
Dict d1("text1.txt");
Dict d2("text1.txt");
如果你的意思是words
words
或d1
,除非你说出来,否则编译器无法理解d2
。你告诉它的方法是放置对象名称,然后是.
,后跟成员名称。
即d1.words
和d2.words
是两个不同的向量。