2016-01-02 39 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

我喜欢阅读模板类类型函数的问题 –