矢量类型函数实现

时间:2016-01-02 04:17:27

标签: c++

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?这是主要问题

2 个答案:

答案 0 :(得分: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(); 

我也不清楚你为什么要使用指针。在您提供的代码中,没有理由使用它们,而只是使用常规自动对象。

答案 1 :(得分:0)

问题来自于这样的表达式:

vector<Attraction*>&attractions;这是对向量的引用,必须进行初始化(与指针不同)。您需要在构造函数中初始化它。

您似乎并不需要使用引用,因此将上述语句更改为vector<Attraction*> attractions;会使程序编译。

但是,我建议使用常规对象,而不是使用指针,因为你的代码中并不需要指针。