矢量类型函数实现

vector type function implemetation

本文关键字:实现 函数 类型      更新时间:2023-10-16
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? 这是主要问题

问题是

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(); 

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

问题来自这样的表达式:

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

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

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