gpt4 book ai didi

c++ - typedef, enum, bool, Bool ------混淆

转载 作者:搜寻专家 更新时间:2023-10-31 01:15:28 24 4
gpt4 key购买 nike

我有一个 logicAND 类,构造函数应该评估两个 boolean 值的 AND 运算,它是这样工作的:

class logicAND{
public:
logicAND(bool a,bool b):value(a&&b){}
bool output(){return value;}
private:
bool value;
};
int main(){
bool m=false;
bool n=true;
logicAND t1(m,n);
t1.output();
}

然后,我在课前添加了一些老式的宏:

typedef enum { False = 0, True = 1 } Bool;
#define bool Bool
#define true True
#define false False

class logicAND{
public:
logicAND(bool a,bool b):value(a&&b){}
bool output(){return value;}
private:
bool value;
};
int main(){
bool m=false;
bool n=true;
logicAND t1(m,n);
t1.output();
}

现在我不能让它工作了。似乎主要问题在于构造函数类型不匹配。

非常感谢指出陷阱、原因和解决方案。谢谢!

最佳答案

主要问题是您为什么要这样做。您希望宏做什么,也就是说,您为什么希望 boolean 值是枚举?然而,要了解哪里出了问题,您必须查看预处理器替换您的宏后代码的样子:

class logicAND
{
public:
logicAND(Bool a,Bool b):value(a&&b){} //Expects two Bools which works. Now it trys to do a&&b, this actually is well defined for enums. However it returns a bool (!) which cannot be stored in "value" since that is a Bool.
Bool output(){return value;}
private:
Bool value; //This now is a Bool! Not a real bool
};

所以它失败的原因是您尝试将 a&&b 返回的 bool 存储在 Bool 类型的变量中。解决此问题的明显方法是删除宏。或者您需要解释为什么需要它们。

关于c++ - typedef, enum, bool, Bool ------混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10056174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com