【发布时间】:2015-12-08 19:14:55
【问题描述】:
在 c++ 中,我有一个对象,其中包含一个向量,该向量包含指向另一个类的对象的指针,但是当我将特定指针添加到该向量时,对象的所有向量都包含相同的指针,这些指针仅分配给一个对象。
更具体一点;我有一个类 City,它包含一个向量,其中包含指向类 Road 的对象的指针。特定的道路需要分配给不同的城市。我将这些特定的指针添加到每个城市,但最后,每个向量似乎都包含分配给一个城市的指针。
#include <iostream>
#include <ctime>
#include <utility>
#include <vector>
using namespace std;
class City;
class Road;
class City{
private:
string name;
vector<Road*> cons;
City* parent = nullptr;
bool visited = false;
public:
City(string naam);
string getName();
void addPtr(Road* conn);
Road* getPtr(int n);
void setBool(bool B);
bool getBool();
void setParent(City* C);
City* getParent();
int consSize();
vector<Road*> getCons();
void print();
};
class Road{
private:
int dist = 0;
pair<City*, City*> cons;
public:
Road(int dis, City* city1, City* city2);
pair<City*, City*> getPair();
int getDist();
void print();
};
City::City(string naam){
name = naam;
}
vector<Road*> City::getCons(){
return cons;
}
void City::addPtr(Road* conn){
cons.push_back(conn);
}
Road::Road(int dis, City* city1, City* city2){
dist = dis;
cons = {city1, city2};
}
main(){
//cities
City milan("Milan");
City bolzano("Bolzano");
City turin("Turin");
City verona("Verona");
//Roads
Road BM(86, &bolzano, &milan);
Road MT(48, &milan, &turin);
Road GT(18, &genoa, &turin);
Road GM(60, &genoa, &milan);
Road MV(42, &milan, &verona);
//connections
milan.addPtr(&BM);
milan.addPtr(&MT);
milan.addPtr(&GM);
milan.addPtr(&MV);
bolzano.addPtr(&BM);
turin.addPtr(>);
turin.addPtr(&MT);
}
可以提供额外的代码(我只是包含函数声明以保持代码更短),我在这里检查了其他问题(以及其他地方,但我认为我没有看到类似的东西我的问题,或者我只是用错了措辞。
【问题讨论】:
-
提供 City::addPtr() 的代码以及构造函数的定义
-
我将那部分添加到代码中
-
告诉我你的城市构造函数的定义
-
您使用本地存储声明
City对象,然后将地址放入您的Road对象中。这通常不是一件好事,因为当City对象超出范围时这些指针将无效(根本不使用指针,或者使用智能指针/使用new分配)。 -
你如何确定所有的向量都包含相同的东西?