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;
}
如有任何建议或建议,我们将不胜感激。
您的代码中存在几个相关问题
- 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;
}
- 我不知道这是否只是一个最小的示例,但是
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;
}
- 关于您的 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
基于配置类型。继承机制(多态性)将为您处理。
*我正在尝试为一个结构对象分配来自不同结构的值,用于使用 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;
}
如有任何建议或建议,我们将不胜感激。
您的代码中存在几个相关问题
- 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;
}
- 我不知道这是否只是一个最小的示例,但是
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;
}
- 关于您的 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
基于配置类型。继承机制(多态性)将为您处理。