C++中有关typedef的问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 12:11:46
我有一程序如下:
#include <iostream>
using namespace std;

struct Month
{std::string name;
int days;
};Month M[12];

typedef char[10] name;
name month[12];
int days[12];

void typein(std::string s,int i,int k)
{name[k]=s;
days[k]=i;
Month[k].name=s;
Month[k].days=i;
}

int main()
{std::string in;
int j;
for(int k=1;k<=12;k++)
{std::cin>>in>>j;
typein(in,j,k);
}
for(int u=1;u<=12;u++)
std::cout<<name[u]<<"\t"<<days[u]<<"\n";
for(int o=1;o<=12;o++)
std::cout<<M[o].name<<"\t"<<M[o].days<<"\n";
return 0;
}
编译时,报错:
month.cpp:9: 错误: expected unqualified-id before ‘[’ token
month.cpp:10: 错误: ‘name’没有命名一个类型
month.cpp: In function ‘void typein(std::string, int, int

楼主的程序两个错误,包括编译错误和运行错误。
1、定义变量name的方法。程序中使用了变量name,却没有定义。而指令
typedef char[10] name;
name month[12];
是不能定义变量name的。正确的方法为:
std::string name[12];
2、所有使用到数组下标的地方,存在下标越界的问题,将会在程序运行时报错的。比如:
for(int k=1;k<=12;k++)
建议修改为
for(int k=0;k<12;k++)
同理,指令
for(int u=1;u<=12;u++)和for(int o=1;o<=12;o++)也要做相应的修改。

struct tagMonth
{std::string name;
int days;
};
typedef struct tagMonth Month;
Month M[12];