地图的范围和价值存储问题
Scope and value storage problems with maps
好吧,我有一个 class,里面有一张地图..
#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();
};
在其他各种 classes 中,我正在从中插入、删除和更新值。 要访问 myMap
,我已尝试将此 class 继承给我的其他 class。但是一个 class 的更改不会反映 给其他人。可能是因为正在创建 myMap
的新副本。我该如何阻止呢?使用 static 关键字会导致链接器错误。我不想在 extern 中使用全局变量。我是 C++ 的新手:( 请帮助我
静态成员的link错误很容易解决,只要在相应的.cpp
文件或同一个翻译单元中定义即可。
class MapDetails
{
...
static MyMap myMap;
...
};
并在 .cpp
文件中输入:
MapDetails::MyMap MapDetails::myMap;
首先,在设计一个 class 之前,先决定它是否意味着类似于值对象(一个 class 具有封装的数据和更改它的方法)或者它是否打算被用作在以后的时间点通过多态性(静态或动态)等方式扩展行为的一种方式。
在上面的示例中,看起来您正在尝试将此 class 用作值对象,因为您只想要类似地图的行为,并且您想要此 class class 可供多个其他 classes 访问。有多种 ways/patterns 可以做到这一点,使地图对象静态化(单例模式)只是一种方法。它并不是很受欢迎,但情况应该决定它的用途而不是偏见。如评论中所述,如果您提供更多代码示例,我们将能够进一步帮助您。
至于您在静态声明中遇到的链接器错误,可能是因为您没有在 class 定义之外提供静态成员变量的定义,这是新手常犯的错误。
好吧,我有一个 class,里面有一张地图..
#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();
};
在其他各种 classes 中,我正在从中插入、删除和更新值。 要访问 myMap
,我已尝试将此 class 继承给我的其他 class。但是一个 class 的更改不会反映 给其他人。可能是因为正在创建 myMap
的新副本。我该如何阻止呢?使用 static 关键字会导致链接器错误。我不想在 extern 中使用全局变量。我是 C++ 的新手:( 请帮助我
静态成员的link错误很容易解决,只要在相应的.cpp
文件或同一个翻译单元中定义即可。
class MapDetails
{
...
static MyMap myMap;
...
};
并在 .cpp
文件中输入:
MapDetails::MyMap MapDetails::myMap;
首先,在设计一个 class 之前,先决定它是否意味着类似于值对象(一个 class 具有封装的数据和更改它的方法)或者它是否打算被用作在以后的时间点通过多态性(静态或动态)等方式扩展行为的一种方式。
在上面的示例中,看起来您正在尝试将此 class 用作值对象,因为您只想要类似地图的行为,并且您想要此 class class 可供多个其他 classes 访问。有多种 ways/patterns 可以做到这一点,使地图对象静态化(单例模式)只是一种方法。它并不是很受欢迎,但情况应该决定它的用途而不是偏见。如评论中所述,如果您提供更多代码示例,我们将能够进一步帮助您。
至于您在静态声明中遇到的链接器错误,可能是因为您没有在 class 定义之外提供静态成员变量的定义,这是新手常犯的错误。