带有向量的c ++不同对象都包含相同的内容

时间:2015-12-08 19:14:55

标签: c++ pointers vector

在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(&GT);
turin.addPtr(&MT);
}

可以提供附加代码(我只是包含函数声明以保持代码更短),我在这里检查了其他问题(以及其他地方,但我不认为我看到过类似的东西对我的问题或我只是说错了我的问题。

1 个答案:

答案 0 :(得分:0)

  

您使用本地存储声明City对象,然后将地址放入Road对象。这通常不是一件好事,因为当City对象超出范围时,这些指针将无效(要么根本不使用指针,要么使用智能指针/使用new分配)。 - crashmstr

这为我修好了