C++ 如何在c++;?
我试图编写一个函数:代码> GETSISH()/CUSE>,它设置了枚举值,<代码>性别>代码>,并使用来自外部.txt文件的值将其打印到C++中的控制台,但由于语法错误,我正在获得各种编译错误。p> 我这里怎么了 代码: 错误: 错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认INT/P> (10,5):错误C2146:语法错误:缺少“;”在标识符“GetSex”之前 (21,9):错误C2146:语法错误:缺少“;”在标识符“mySex”之前 (21,9):错误C2065:“mySex”:未声明的标识符 (22,5):错误C2065:“mySex”:未声明的标识符 (22,13):错误C3861:“GetSex”:找不到标识符 (23,42):错误C2065:“mySex”:未声明的标识符 (42,11):错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认INT/P> (42,1):错误C2086:“int Sex”:重新定义 (10) :信息:见“性别”声明 (42,5):错误C2146:语法错误:缺少“;”在标识符“GetSex”之前 (43,1):错误C2143:语法错误:缺少“;”在“{”之前 (43,1):错误C2447:“{”:缺少函数头(旧式正式列表?)替换:C++ 如何在c++;?,c++,enums,C++,Enums,我试图编写一个函数:代码> GETSISH()/CUSE>,它设置了枚举值,性别>代码>,并使用来自外部.txt文件的值将其打印到C++中的控制台,但由于语法错误,我正在获得各种编译错误。p> 我这里怎么了 代码: 错误: 错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认INT/P> (10,5):错误C2146:语法错误:缺少“;”在标识符“GetSex”之前 (21,9):错误C2146:语法错误:缺少“;”在标识符“mySex”之前 (21,9):错误C2065:“my
Sex GetSex(fstream&);
enum Sex { M, F };
在:
替换:
Sex GetSex(fstream&);
enum Sex { M, F };
在:
您必须编写某种转换函数。 比如:
std::可选CharToSex(字符c){
开关(c){
案例“M”:
案例“m”:
回归性::M;
案例“F”:
案例“f”:
返回性::F;
违约:
返回std::nullopt;
}
}
如果您不喜欢std::optional
,那么可以使用异常
您还必须在上面的使用位置声明CharToSex,但这与您的问题无关
编译器错误的具体原因是GetSex()中不知道性别
只需交换一下枚举定义和函数声明。您必须编写某种转换函数。 比如:
std::可选CharToSex(字符c){
开关(c){
案例“M”:
案例“m”:
回归性::M;
案例“F”:
案例“f”:
返回性::F;
违约:
返回std::nullopt;
}
}
如果您不喜欢std::optional
,那么可以使用异常
您还必须在上面的使用位置声明CharToSex,但这与您的问题无关
编译器错误的具体原因是GetSex()中不知道性别
只需交换一下枚举定义和函数声明。在函数声明上方移动
enum Sex{M,F};
并使用namespace std;添加缺少的include和之后,我没有收到任何错误
但是,Sex mySex=static_cast(sexChar);
并没有你想象的功能。没有内置的方法将字符串(或字符)转换为枚举(参见其他答案了解如何实现)
相反,此行将sexChar
视为一个数值,并使用该数值创建一个Sex
。static\u cast(0)
将为您提供M
,static\u cast(1)
将为您提供F
。将任何其他数字转换为Sex
会导致未定义的行为。(在某些情况下,允许对枚举强制转换一个数字,即使它没有具有该值的常数,但它不适用于此处;您可以在中找到更多详细信息)。在函数声明上方移动enum Sex{M,F};
并使用命名空间std;
添加缺少的include和后,我没有收到任何错误
但是,Sex mySex=static_cast(sexChar);
并没有你想象的功能。没有内置的方法将字符串(或字符)转换为枚举(参见其他答案了解如何实现)
相反,此行将sexChar
视为一个数值,并使用该数值创建一个Sex
。static\u cast(0)
将为您提供M
,static\u cast(1)
将为您提供F
。将任何其他数字转换为Sex
会导致未定义的行为。(在某些情况下,允许将数字强制转换为枚举,即使它没有具有该值的常量,但此处不适用;您可以在中找到更多详细信息).您应该将错误添加到问题中。您应该将错误添加到问题中。虽然CharToSex与问题无关。但是,我的回答的最后两行是。CharToSex与问题无关。但是,我的回答的最后两行是。谢谢。因此,如果我想阅读n该字符并设置枚举,最好的方法是按照@JohnkaS?@Reno-Yep的建议编写转换函数,诸如此类。谢谢。因此,如果我想读入该字符并设置枚举,最好的方法是按照@JohnkaS?@Reno-Yep的建议编写转换函数,诸如此类。
Sex GetSex(fstream&);
enum Sex { M, F };
enum Sex { M, F };
Sex GetSex(fstream&);