C++中构造函数中的枚举
Enums in Constructors in C++
我对C++中的构造函数和OOP非常陌生,遇到了以下问题。我试图创建以下类,但显然枚举器出了问题。我还想知道我是否可以以某种方式将欧元设置为默认选项。
class Amount
{
// Todo 6.2
// Implement class Amount
protected:
float Netto_;
float Brutto_;
enum tax_ { tax1 , tax2};
enum Currency_ { EUR, USD };
const float eur_to_usd = 1.13;
const float usd_to_eur = 0.89;
std::string Description_;
public:
Amount(std::string Description , float Brutto, Currency_ Currency, tax_ taxtype) : Brutto_{Brutto} , Description_{Description}, Currency_{Currency}, tax_{taxtype} {}
};
我得到以下错误:
"Currency_" is not a nonstatic data member or base class of class "Amount"
谢谢!
此行:
enum Currency_ { EUR, USD };
不是在声明成员变量,而是在声明类型。由于没有变量,因此无法初始化该变量。你需要把它分成两行:
enum Currency_ { EUR, USD };
Currency_ Currency_val;
您需要声明一个Currency_类型的变量,并将枚举定义公开,以便在构造函数中使用它。(对于tex_也是如此(
class Amount
{
public:
enum Currency_ { EUR, USD };
protected:
Currency_ Currency;
...
};
void test() {
Amount amount("description", 2.0, Amount::USD, Amount::tax1);
}
要声明一个新的枚举类型,您应该这样做:
enum MyEnumType {A, B, C};
现在您可以声明MyEnumType:的实例
MyEnumType variable;
你可以在一个类中创建枚举类型,但你从来没有真正创建过该类型的实例。
您将类型与变量混淆了。你的名字也有混合的大写字母,这可能会导致你的误解。大写不应该是随机的,而应该隐含意义。类型通常以大写字母开头,成员变量则以小写字母开头(通常以_结尾(。无论您选择什么实际的代码样式,都要保持一致。不要用大写枚举器名称声明某些枚举,而用小写枚举器等声明其他枚举。此外,您不应该混合常量、类型和变量声明,而是在类中将它们物理地分隔成段。这也有助于更清楚哪些需要初始化,哪些不需要初始化。
以下是对代码的一个小的重新排列,并固定大小写,以及类型声明和变量声明的分离:
#include <string>
class Amount
{
// types (uppercase letter)
enum Tax { TAX1, TAX2};
enum Currency { EUR, USD };
// variables (needing initialization. All have trailing '_', not the types)
std::string description_;
float brutto_;
float netto_;
Currency currency_;
Tax tax_;
public:
Amount(std::string const & description, float brutto, Currency currency, Tax taxtype) :
description_{description},
brutto_{brutto},
netto_{0},
currency_{currency},
tax_{taxtype}
{}
};
希望这能让事情变得更清楚。此外,您应该按照变量声明的顺序初始化它们(因为这是它们实际初始化的顺序(,而且您没有初始化netto_,所以我给它一个0。最后,我通过引用传递了您的字符串,以避免不必要的复制。我删除了您的常量,因为它们不是这个问题的一部分,而且您可能希望转换率无论如何都是可配置的。
相关文章:
- C++中构造函数中的枚举
- 如何使用默认值为构造函数中的枚举赋值?
- 枚举模板函数一般调用
- 枚举在构造函数和班级中被调用
- Java 类型的枚举,C++中的自定义值和构造函数
- C++使用来自不同模板类的枚举作为函数参数
- 包含枚举的结构的C 复制构造函数
- 设计问题:枚举或函数或其他什么
- 枚举器而不是用于类实例化的构造函数
- C++:使用结构或枚举重载构造函数之间的区别
- 将成员枚举变量传递给类构造函数时出现无效的重定义错误
- 我可以编写一个在 c++ 中返回到枚举的函数吗?
- C++枚举复制构造函数和赋值运算符
- 将枚举作为函数参数传递
- 将枚举传递给构造函数
- 为什么可以将枚举作为函数变量传递,但不能返回枚举?
- 在lldb中使用匿名枚举作为函数参数错误
- 枚举和函数
- 如何创建一个接收枚举的函数
- 枚举参数函数和开关优化