繁体   English   中英

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

[英]c++ different objects with vector all contain same contents

在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);
}

可以提供其他代码(我只是添加了函数声明以使代码更短),我在这里(以及其他地方)检查了其他问题,但我认为我没有看到与我的问题相似的东西或者我只是说错我的问题。

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

这为我解决了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM