2016-01-02 38 views
-3
class City 
{ 
    private: 
     int id; 
     string name; 
     int populations; 
     int nooftourist; 
     vector<Attraction*>&attractions; 
    public: 
     City(int id,string name,int populations,int nooftourist):id(id),name(name),populations(populations),nooftourist(nooftourist){} 
     void setId(int _id); 
     void setName(string _name); 
     int getId(); 
     string getName(); 
     void display() {} 
     vector<Attraction*>getAttractions() { return attractions;} 
}; 

int main(){ 
    vector<City*>cities; 
    cities.push_back(new City(111,"Kuala Lumpur",80000,4000)); 
    cities.push_back(new City(112,"Malacca City",30000,1500)); 
    cities.push_back(new City(113,"Ipoh",70000,3500)); 
    for (int i = 0; i < cities.size(); i++) { cout<<i+1<<"."<<cities[i]->getName()<<endl; } 
    for (int i = 0; i < cities.size(); i++) { delete cities[i]; } 
    vector<Attraction*> att = cities.getAttractions(); 
    att.push_back(new Attraction(11,"Pavillion",1)); 
} 

這只是從我的代碼部分段,我仍然有一些類,但不相關的問題在這裏當我編譯爲什麼說城市沒有成員getAttraction?這是主要的問題矢量型功能implemetation

+0

你不明白什麼?這只是類聲明的一部分 - 哪些不起作用?也許閱讀stl向量? http://www.cplusplus.com/reference/vector/vector/ – Tim

+0

實際上出了什麼問題?你能詳細說明你的問題嗎? –

+0

int main(){ vector cities; cities.push_back(new City(111,「Kuala Lumpur」,80000,4000)); cities.push_back(新城市(112,「馬六甲市」,30000,1500)); cities.push_back(new city(113,「Ipoh」,70000,3500)); (int i = 0; i getName()<< endl; } for(int i = 0; i att = cities.getAttractions(); att.push_back(新景點(11,「Pavillion」,1)); } 這是我的主要功能,在編譯時遇到了一些錯誤 –

回答

3

問題是

vector<Attraction*>&attractions; 

是一個向量的引用,因此你需要在構造函數中進行初始化。既然你不這樣做,你的代碼將無法編譯,因爲引用必須被初始化,而不像指針。我不認爲你的意思是有一個參考,並且看起來你的代碼看起來並不需要它。您可以簡單地將其更改爲:

vector<Attraction*> attractions; 

它應該編譯。

在旁註中,我認爲你的意思是讓getAttractions()返回對向量的引用,以便可以修改該類所擁有的向量。如果是這樣,則情況下更改

vector<Attraction*>getAttractions() { return attractions;} 

vector<Attraction*>& getAttractions() { return attractions;} 

vector<Attraction*> att = cities.getAttractions(); 

vector<Attraction*>& att = cities.getAttractions(); 

我也不清楚爲什麼你正在使用的指針在所有。在你提交的代碼中沒有理由使用它們,而只是使用常規的自動對象。

+0

C:\ Users \ MICHAEL \ Desktop \ OOPNEW.CPP ||在構造函數'City :: City(int,std :: string,int,int)'中: C:\ Users \ MICHAEL \ Desktop \ OOPNEW.CPP | 100 |錯誤:未初始化的引用成員'City :: attractions'[-fpermissive] | C:\ Users \ MICHAEL \ Desktop \ OOPNEW.CPP ||在函數'int main()'中: C:\ Users \ MICHAEL \ Desktop \ OOPNEW.CPP | 193 |錯誤:'class std :: vector '沒有任何成員,名爲'getAttractions'| || ===構建失敗:2個錯誤,0個警告(0分鐘,0秒)=== | –

+0

現在我沒有在我的課程和主要功能,爲什麼仍然沒有得到它? –

+0

@MiKe請停止發佈無法讀取的評論。 –

0

的問題來自這樣一個表達式:

vector<Attraction*>&attractions;這是一個矢量的引用,並必須被初始化(不像指針)。你將需要在你的構造函數中初始化它。

看來你並不是真的需要使用引用,所以改變上述語句到vector<Attraction*> attractions;應該使程序編譯。

但是,我不建議使用常規對象,而是使用指針,因爲在代碼中並不需要指針。

+0

但我想使用指針 –

+0

爲什麼你想這麼做? –

+0

我喜歡閱讀模板類類型函數的問題 –