为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++ C
慕侠2389804 2022-05-13 17:11:42
#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};就报错,不知道为什么?
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

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 enum

mei 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
{
typedef
pair<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; // 惊! 但它的确是合法类型
}



查看完整回答
反对 回复 2022-05-16
?
墨色风雨

TA贡献1853条经验 获得超6个赞

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后面



查看完整回答
反对 回复 2022-05-16
  • 2 回答
  • 0 关注
  • 212 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信