C ++ Switch语句分配结构值

C++ Switch statement to assign struct values

*我正在尝试为一个结构对象分配来自不同结构的值,用于使用 switch 语句选择的任何鸟类类型。但是,我收到 conflicting decoration 错误。我该如何解决?

   /**
   temp and humidity control points
*/
struct chicken_config
{
  char *node_type = "incubator";
  char *sub_type = "chicken";       // set the type of incubator
  int sub_type_id = 1;
  int hot = 102;                //set hot parameter
  float optimum_temp = 99.5;    // set optimum_temp temp to go to b4 turning off
  float cold = 89.9;            //set cold parameter
  int high_hum = 65;            //set high humidity parameter
  int optimum_hum = 60;         // set optimum humidity parameter to go to b4 turning off
  int low_hum = 55;             // set low humidity parameter
};

struct turkey_config
{
  char *node_type = "incubator";
  char *sub_type = "turkey";        // set the type of incubator
  int sub_type_id = 2;
  int hot = 102;                //set hot parameter
  float optimum_temp = 99.5;    // set optimum_temp temp to go to b4 turning off
  float cold = 89.9;            //set cold parameter
  int high_hum = 65;            //set high humidity parameter
  int optimum_hum = 60;         // set optimum humidity parameter to go to b4 turning off
  int low_hum = 55;             // set low humidity parameter
};

struct peacock_config
{
  char *node_type = "incubator";
  char *sub_type = "peacock";       // set the type of incubator
  int sub_type_id = 3;
  int hot = 101;                //set hot parameter
  float optimum_temp = 99.5;    // set optimum_temp temp to go to b4 turning off
  float cold = 98.9;            //set cold parameter
  int high_hum = 65;            //set high humidity parameter
  int optimum_hum = 60;         // set optimum humidity parameter to go to b4 turning off
  int low_hum = 55;             // set low humidity parameter
};

struct chameleon_config
{
  char *node_type = "incubator";
  char *sub_type = "chameleon";     // set the type of incubator
  int sub_type_id = 4;
  int hot = 81;                 //set hot parameter
  float optimum_temp = 77.5;    // set optimum_temp temp to go to b4 turning off
  float cold = 76.5;            //set cold parameter
  int high_hum = 95;            //set high humidity parameter
  int optimum_hum = 85;         // set optimum humidity parameter to go to b4 turning off
  int low_hum = 75;             // set low humidity parameter
};


// structure for current incubator configuration
struct current_config
{
  char *node_type = "incubator";
  char *sub_type;               // set the type of incubator
  int sub_type_id;
  int hot;                  //set hot parameter
  float optimum_temp;       // set optimum_temp temp to go to b4 turning off
  float cold;               //set cold parameter
  int high_hum;             //set high humidity parameter
  int optimum_hum;          // set optimum humidity parameter to go to b4 turning off
  int low_hum;              // set low humidity parameter
} currentConfig;

////////////////////////////////////////// /////////

以下是我遇到问题的地方。

    // setup directed sub-type
void switch_sub_type(int sub_type)
{
  switch (sub_type)
  {
    // assign the bird type params
    case 1: chicken_config currentConfig;
    case 2: turkey_config currentConfig;
    case 3: peacock_config currentConfig;
    case 4: chameleon_config currentConfig;
  }
  return;
}

如有任何建议或建议,我们将不胜感激。

您的代码中存在几个相关问题

  1. C struct 概念似乎是错误的:您可以使用一组特定的参数定义单个 struct 类型并创建此 struct 的多个实例。对于您的情况,您可以创建一个基本的 animal_config 结构,并为每个要包含到代码中的动物创建一个实例。

这样,您可以创建通用配置:

    struct animal_config
    {
      char node_type;
      char sub_type;        // set the type of incubator
      int sub_type_id;
      int hot = 102;                //set hot parameter
      float optimum_temp;    // set optimum_temp temp to go to b4 turning off
      float cold;            //set cold parameter
      int high_hum;            //set high humidity parameter
      int optimum_hum;         // set optimum humidity parameter to go to b4 turning off
      int low_hum;             // set low humidity parameter
    };

然后根据条件给它赋不同的值:



    void switch_sub_type(int sub_type)
    {
      switch (sub_type)
      {
        // assign the bird type params
        struct animal_config currentConfig;
        case 1: 
          animal_config.node_type = "incubator";
          animal_config.sub_type = "chicken";
          animal_config.sub_type_id = 1;
          animal_config.hot = 102;
             ...
          };
          break;
        case 2:
        ...
      }
      return;
    }
  1. 我不知道这是否只是一个最小的示例,但是 switch_sub_type 方法没有 returning 任何东西或将 currentConfig 存储在任何地方。函数调用完成后,它将从堆栈中删除。按照我之前的示例,也许您想 return 将 currentConfig 对象发送给调用者:


    struct animal_config switch_sub_type(int sub_type)
    {
      switch (sub_type)
      {
        // assign the bird type params
        struct animal_config currentConfig;
        case 1: 
          animal_config.node_type = "incubator";
          animal_config.sub_type = "chicken";
          animal_config.sub_type_id = 1;
          animal_config.hot = 102;
             ...
          };
          break;
        case 2:
        ...
      }
      return currentConfig;
    }
  1. 关于您的 switch-case 子句,您可能需要在每个 case 之后包含一个 break; 语句。否则,如果选择一个案例,它之后的所有案例也将被执行,产生(可能)不希望的行为。

我有两个建议:一是struct,可分割的变量;和一个碱基 class,几个 child classes.

一个结构,多个变量

根据您的代码,每只鸟可能是同一结构的不同实例。

struct Bird_Config
{
  char *node_type;
  char *sub_type;       // set the type of incubator
  int sub_type_id;
  int hot;                //set hot parameter
  float optimum_temp;    // set optimum_temp temp to go to b4 turning off
  float cold;            //set cold parameter
  int high_hum;            //set high humidity parameter
  int optimum_hum;         // set optimum humidity parameter to go to b4 turning off
  int low_hum;             // set low humidity parameter
};

int main()
{
   Bird_Config chicken;
   chicken.hot = 102;

   Bird_Config turkey;
   //...
   return 0;
}

基础Class和继承

另一个实现可能是使用 parent/base class 和许多 child classes:

struct Bird_Config
{
      char *node_type = "incubator";
      char *sub_type;       // set the type of incubator
      int sub_type_id;
      int hot;                //set hot parameter
      float optimum_temp;    // set optimum_temp temp to go to b4 turning off
      float cold;            //set cold parameter
      int high_hum;            //set high humidity parameter
      int optimum_hum;         // set optimum humidity parameter to go to b4 turning off
      int low_hum;             // set low humidity parameter
};  

class Chicken_Config : public Bird_Config
{
     Bird_Config::sub_type = "chicken";
     //...
};

The inheritance model allows you to do something like this:  
int main()
{
   std::vector<Bird_Config *> configs;
   Bird_Config * p_bird = new Chicken_Config;
   configs.push_back(p_bird);
   p_bird = new Turkey_Config;
   configs.push_back(p_bird);
   //...
   for (int i = 0; i < configs.size(); ++i)
   {
      std::cout << "Bird Configuration["
                << i
                << "]: "
                << configs[i]->sub_type
                << "\n";
   }
   return 0;
}

在上面的例子中,您不需要switch基于配置类型。继承机制(多态性)将为您处理。