【问题标题】:c++ different objects with vector all contain same contentsc ++带有向量的不同对象都包含相同的内容
【发布时间】: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(&GT);
turin.addPtr(&MT);
}

可以提供额外的代码(我只是包含函数声明以保持代码更短),我在这里检查了其他问题(以及其他地方,但我认为我没有看到类似的东西我的问题,或者我只是用错了措辞。

【问题讨论】:

  • 提供 City::addPtr() 的代码以及构造函数的定义
  • 我将那部分添加到代码中
  • 告诉我你的城市构造函数的定义
  • 您使用本地存储声明 City 对象,然后将地址放入您的 Road 对象中。这通常不是一件好事,因为当City 对象超出范围时这些指针将无效(根本不使用指针,或者使用智能指针/使用new 分配)。
  • 你如何确定所有的向量都包含相同的东西?

标签: c++ pointers vector


【解决方案1】:

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

这为我解决了问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2014-11-21
    • 2021-05-08
    • 1970-01-01
    相关资源
    最近更新 更多