我有一个关于在我的作业中使用enum
和struct
的问题,我在理解时遇到了一些麻烦。
首先,这是我们老师给我们的代码示例。
enum MonthType {JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC};
struct WeatherType
{
int avgHiTemp;
int avgLoTemp;
float actualRain;
float recordRain;
};
然后,家庭作业要声明WeatherListType
组件的一维数组类型WeatherType
,以便通过类型MonthType
的值进行索引。当我尝试通过编码来做到这一点时:
typedef WeatherType WeatherListType[MonthType];
我收到了这些错误:
problem5.cpp:19:47: error: expected primary-expression before ']' token
typedef WeatherType WeatherListType[MonthType];
^
problem5.cpp:21:2: error: 'WeatherListType' was not declared in this scope
WeatherListType yearlyWeather;
我对这个问题的含义感到困惑,如果我走在正确的轨道上,我究竟做错了什么?
答案 0 :(得分:2)
问题在于
typedef WeatherType WeatherListType[MonthType];
括号[]
之间的东西必须是数字(它是元素的数量),但MonthType
不是数字,它是一种类型。
这里有两个主要选项:
只需使用12。
添加另一个枚举项:enum MonthType {..., NOV, DEC, NUM_MONTHS};
然后使用NUM_MONTHS。
这是枚举的一个常见技巧 - 因为它们从0开始向上计数,NUM_MONTHS
将是第13个值,因此它获得值12。
您执行此操作的原因是,如果您添加其他值,编译器将自动为您调整NUM_MONTHS
。我不认为我们很快就会有新的月份,所以在这种情况下并不重要。
(旁注:数组总是用C中的整数索引。你不能用枚举索引一个。但枚举可以转换为整数然后回来,所以这不是问题)
答案 1 :(得分:0)
在这里,我已经给出了完成程序以供您澄清,因为我没有提到我在输出中给出的输入值,因为每月12个月,4个数据总共需要给出48个数据。假设给出了值。但是当你运行时你必须给出所有48个值。你在哪里使用它它是conatant 0,在FEB它是常数1,依此类推DEC它是常数11.hope你明白这个对你有用
#include<iostream>
using namespace std;
enum MonthType {JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC};
struct WeatherType
{
int avgHiTemp;
int avgLoTemp;
float actualRain;
float recordRain;
};
int main()
{
WeatherType WeatherListType[12];
for (int i=JAN;i<=DEC;i++)
{
cout<<"\n High temperature :";
cin>>WeatherListType[i].avgHiTemp;
cout<<"\n Low temperature :";
cin>>WeatherListType[i].avgLoTemp;
cout<<"\n Actual Rain :";
cin>>WeatherListType[i].actualRain;
cout<<"\n Record Rain :";
cin>>WeatherListType[i].recordRain;
}
cout<<"\n Month \t HiTemp\t LoTemp\t ActualRain\t RecordRain\n";
for (int i=JAN;i<=DEC;i++)
{
cout<<i<<"\t"<<WeatherListType[i].avgHiTemp;
cout<<"\t"<<WeatherListType[i].avgLoTemp;
cout<<"\t"<<WeatherListType[i].actualRain;
cout<<"\t"<<WeatherListType[i].recordRain<<"\n";
}
}
OUTPUT
High temperature :40
Low temperature :28
Actual Rain :34
Record Rain :56
.
.
.
Month HiTemp LoTemp ActualRain RecordRain
0 40 28 34 56
1 45 32 45 67
2 34 23 56 76
3 34 32 45 43
4 67 12 45 43
5 78 65 45 32
6 56 54 34 23
7 45 34 23 23
8 3 1 45 43
9 34 45 23 23
10 12 3 34 43
11 56 54 43 34