2011-11-12 57 views
0
#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; 
} 

我得到一個錯誤,沒有在main()中聲明單詞向量。範圍內類向量的問題

我怎樣才能讓這個對編譯器可見,因爲我已經在類中定義了它。一旦對象被實例化並且構造函數被調用,不應該創建單詞向量?但編譯器沒有注意到這一點。

我該如何解決這個問題?

回答

4

words是成員在Dict對象d

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

^^我覺得自己像一個白癡.. – CyberShot

1

既然你可以有這個類的多個對象,每個都有自己的words情況下,怎麼會知道你的意思是哪一個編譯器?

只要告訴編譯器到哪裏找到的話:

cout << d.words.size(); 
0

您應該使用d.words因爲wordsd成員。

在類中,每個成員,變量或函數都屬於一個對象。如果你有兩個對象:

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

那麼有沒有辦法讓編譯器words明白你的意思wordsd1d2,除非你告訴它。您告訴它的方式是放置對象名稱,後跟.後跟成員名稱。

d1.wordsd2.words是兩個不同的向量。