簡體   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