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
?这是主要问题
答案 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;
会使程序编译。
但是,我建议使用常规对象,而不是使用指针,因为你的代码中并不需要指针。