C++ C++;将std::map值设置为结构实例的指针

C++ C++;将std::map值设置为结构实例的指针,c++,pointers,stdmap,C++,Pointers,Stdmap,我有多个设备,每个设备都有自己的函数集,每个都有不同的值和不同的变量类型。我试图创建一个数据集,以一种简单的方式存储这些变量,以便在动态添加或删除这些设备时访问它们 我的想法是创建一个保存设备信息的类,其中包含一个可用于不同功能的结构。为了方便地访问设备和函数,设备/函数名将作为键存储在映射中,指向类/结构实例的指针将作为该键的值存储。对于设备图,这很好。然而,对于函数映射,在类内部,我似乎无法让它工作。所以 1) 将结构指针放入映射的正确方式是什么 2) 在类中放置结构是个好主意吗 < 3)我

我有多个设备,每个设备都有自己的函数集,每个都有不同的值和不同的变量类型。我试图创建一个数据集,以一种简单的方式存储这些变量,以便在动态添加或删除这些设备时访问它们

我的想法是创建一个保存设备信息的类,其中包含一个可用于不同功能的结构。为了方便地访问设备和函数,设备/函数名将作为键存储在映射中,指向类/结构实例的指针将作为该键的值存储。对于设备图,这很好。然而,对于函数映射,在类内部,我似乎无法让它工作。所以

1) 将结构指针放入映射的正确方式是什么

2) 在类中放置结构是个好主意吗

< 3)我对C++是相当新的,所以有更好的STL或方法吗? 此代码片段位于.hpp文件中

std::map设备;
类设备{
私人:
//设备信息
std::字符串devName;
尺寸设备;
焦态;
std::映射函数;//---错误
//多功能设置
结构函数{
//功能信息
std::字符串名称;
大小函数ID;
字符类型;
};
公众:
//获取设备和函数值的函数
我在Linux(Ubuntu 19.04)上运行此代码,并使用Visual Studio代码作为IDE。它给我的错误是:

应为“>”,其中*func为


谢谢,伙计们,我终于明白了

std::map<std::string, device*> devices;
class device {
private:
   //Device info
   std::string devName;
   size_t devId;
   char state;

   //Setup for multiple functions
   struct func{
       //Functions info
       std::string funcName;
       size_t funcId;
       char funcType;
   };

   //Map of funcution Id's to pointers of function objects
   std::map <id, func*> functions;

  public:
  //Functions to get device and function values
std::map设备;
类设备{
私人:
//设备信息
std::字符串devName;
尺寸设备;
焦态;
//多功能设置
结构函数{
//功能信息
std::字符串名称;
大小函数ID;
字符类型;
};
//函数Id到函数对象指针的映射
std::map函数;
公众:
//获取设备和函数值的函数

这是一个转发声明错误。

谢谢各位,我能找到答案

std::map<std::string, device*> devices;
class device {
private:
   //Device info
   std::string devName;
   size_t devId;
   char state;

   //Setup for multiple functions
   struct func{
       //Functions info
       std::string funcName;
       size_t funcId;
       char funcType;
   };

   //Map of funcution Id's to pointers of function objects
   std::map <id, func*> functions;

  public:
  //Functions to get device and function values
std::map设备;
类设备{
私人:
//设备信息
std::字符串devName;
尺寸设备;
焦态;
//多功能设置
结构函数{
//功能信息
std::字符串名称;
大小函数ID;
字符类型;
};
//函数Id到函数对象指针的映射
std::map函数;
公众:
//获取设备和函数值的函数

这是一个正向声明错误。

struct funct
的定义移动到
函数映射的上方。或者将其放入.h文件中,并在需要的地方包含它……或者正向声明它。看起来
设备
是正向声明的,所以这应该以相同的方式工作。模板参数需要是类型。
struct func
是一种类型。
struct func*
也是一种类型,但是
struct func*func
不是一种类型。将
struct func
的定义移动到
函数的映射上方。或者将其放入.h文件中,并在需要的地方包含它……或者向前声明它。看起来
设备
是向前声明的,因此这是应该以同样的方式工作。模板参数必须是类型。
struct func
是类型。
struct func*
也是类型,但
struct func*func
不是类型。