Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 常数存储c++;?_C++_Storage - Fatal编程技术网

C++ 常数存储c++;?

C++ 常数存储c++;?,c++,storage,C++,Storage,我试图在我的cpp项目中的某个地方存储几个常量。稍微看一看,这样做的方法似乎是在.h文件中定义变量并在.cpp文件中声明它 //.h class Region { public: static const int CC; }; //.cpp const int Region::CC= 12; 我了解到,要解决静态类内定义错误,可以使用constexpr 我需要存储的是区域(想想坐标/矩形),基本上是坐标系中的两个坐标。我希望能够对一个区域进行分类和使用,但也能使用其子区域 伪码示例 Co

我试图在我的cpp项目中的某个地方存储几个常量。稍微看一看,这样做的方法似乎是在.h文件中定义变量并在.cpp文件中声明它

//.h
class Region {
public:
   static const int CC;
};
//.cpp
const int Region::CC= 12;
我了解到,要解决静态类内定义错误,可以使用
constexpr

我需要存储的是区域(想想坐标/矩形),基本上是坐标系中的两个坐标。我希望能够对一个区域进行分类和使用,但也能使用其子区域

伪码示例

Country(100, 100, 900, 900){
    City(150, 150, 200, 200) {
        House1(155, 155, 160, 160)
        House2(170, 170, 180, 180)
    }
    Lake(300, 300, 400, 400)
}
区域可以“无限期”堆叠的位置(假设最多10个嵌套)。在那里我可以像这样进入它的区域

Country //returns 100,100,900,900
Country.City //returns 150,150,200,200
Country.City.House1 //returns 155,155,160,160
Country.Lake //returns 300,300,400,400

我该如何创建一个允许这种存储/访问的结构?我想可能是名称空间,但问题是名称空间也应该存储坐标。

我认为最简单的方法是只需构建一个包含所有相关信息的结构,并建立一个这样的数组来容纳你想要的“国家”

结构国家{ . . . };


你的例子有两个方面,一个是结构,一个是元素在结构中的位置。你似乎只正确地识别了第二个方面。您试图以某种恒定的方式定义这两者,尽管信息是恒定的,但这不是一个好主意:-)

一个好的解决方案是使用一个超类,例如GeopositionDelete,它有一个geoposition结构的实例变量(不是常量!!!)。超类的构造函数接受这样一个地理位置实例,并将信息存储到其本地成员中

此外,对于您需要的每一种子元素,都有子类,如region、city、house、lake等。此外,每个子类都有一个包含元素的成员。如果要限制此操作,请根据定义它,否则允许添加GeoppositionElements。请参见此处有关如何执行此操作的类似示例:


最后,您需要通过创建结构元素的实例来设置它,并且在这样做时,使用地理位置调用它们的构造函数。您可以使用与前面所示类似的方式存储地理位置,但以阵列的形式存储。更好的方法是通过文件(例如CSV或JSON)提供信息,并对其进行解析。

类似于
struct S{std::string name;int x,y,w,h;std::vector subregions;}?有什么问题?你问的问题似乎不太清楚。旁白:静态常量原语的值可以在头中。在我看来,静态常量变量不是你想要的。这意味着你将被困在一个国家,一个城市,一座房子里。当然,你可以有一套房子1和一套房子2,但这是一个非常糟糕的设计,当你到了1000号房子时,你会感到非常厌倦。
    struct GeoPosition
    {
       int  a,b,c,d;
    }

class GeoLocatedElement
{
protected:
   GeoPosition location;
public:
   GeoLocatedElement(GeoLocation loc);
}

class Region:public GeoLocatedElement
{
...
}

..