难道是typedef不能对enum类型起作用?请指教~

#include<iostream.h>
void main()
{
typedef enum mei;
enum mycolor{father,mother,brother,sister=9};
mycolor a=sister;
cout<<a<<endl;
}
写为mei mycolor{father,mother,brother,sister=9};
就报错,不知道为什么?

慕侠2389804
浏览 214回答 2
2回答

慕田峪7331174

enum 和 struct、class差不多, 是一个类型的修饰词, 而不是特定的类, typedef之后跟的必须是一个特定的类型. 应该这样:#include <iostream>using namespace std;int main(){enum MyColor{red, blue, green};typedef MyColor C;C a = blue;cout << a;}如果你要把enum换成mei就只能用#define了:#define mei enummei MyColor{red, blue, ...};还有楼上的, 你这句:"其实typedef在C++里边没多少用处。 ", 有用没有你看看下面这段代码就知道了, 不过估计你也看不懂:#include <iostream>#include <typeinfo>using namespace std;template <int n, class T>struct Test1{typedef typename const Test1<n-1, T>::type* type;};template <class T>struct Test1<0, T>{typedef T* type;};template <int n, class T>struct Test2{typedefpair<pair<typename Test2<n-1, T>::type, T >, pair<T, typename Test2<n-1, T>::type> > type;};template <class T>struct Test2<0, T>{typedef T* type;};int main(){cout << typeid(Test1<5, int>::type).name() << '\n';Test2<5, double>::type magic;cout << typeid(magic).name() << endl; // 惊! 但它的确是合法类型}

墨色风雨

typedef后面必须是一个类型,enum不是一个类型,用typedef定义是没有用的。其实typedef在C++里边没多少用处。虽然不是很准确但你可以这样理解,typedef后面必须是一个类型,所谓的类型就是能够用来定义变量的,比如int、mycolor,std::string都是类型,因为他们可以用来定义变量,比如int a;mycolor b;std::string c;a,b,c都是变量。而enum不是类型,因为它定义的不是变量,你不能定义enum a;a=5;这样是错的,enum定义一个类型,而不是变量enum a{x,f};//这样a就是一类型a b;//b是一个变量所以enum不能放在typedef后面
打开App,查看更多内容
随时随地看视频慕课网APP