地图的范围和价值存储问题

Scope and value storage problems with maps

本文关键字:存储 问题 范围 地图      更新时间:2023-10-16

我有一个类,它包含一个映射。。

#pragma once
#include "Member.h"
class MapDetails
{
public:
    typedef map<int, Member*> MyMap;
    typedef pair<int,Member*> MyPair;
     MyMap myMap;
    MapDetails(void);
    MapDetails(const MapDetails& obj);
public:
    ~MapDetails(void);
     //MyMap returnMap();
};

在其他各种类中,我正在插入、删除和更新其中的值。为了访问myMap,我尝试将此类继承到其他类中。但是一个类的更改不会反映到其他类。可能是因为正在创建myMap的新副本。我该如何阻止这种情况?使用static关键字会导致链接器错误。我不想使用带有extern的全局变量。我是C++的新手:(请帮助我

在设计一个类之前,首先要决定它是一个值对象(一个具有封装数据和更改方法的类),还是在以后通过多态性(静态或动态)等方式扩展行为。

在上面的例子中,看起来您正试图像使用值对象一样使用这个类,因为您只想要类似映射的行为,并且您希望这个类的单个对象可以被多个其他类访问。有多种方法/模式可以做到这一点,使地图对象静态(singletons模式)只是一种方法。它不太受欢迎,但环境应该决定它的用途,而不是偏见。正如评论中提到的,如果您提供更多的代码示例,我们将能够进一步帮助您。

至于你在静态声明中遇到的链接器错误,可能是因为你没有在类定义之外为静态成员变量提供定义,这是新手常见的错误。

使用静态成员很容易解决链接错误,只需在相应的.cpp文件或相同的翻译单元中放置一个定义即可。

class MapDetails
{
   ...
   static MyMap myMap;
   ...
};

并在.cpp文件中放入:

MapDetails::MyMap MapDetails::myMap;