typedef, enum, bool, Bool ------confused
typedef, enum, bool, Bool ------confused
我有一个逻辑与类,构造函数应该计算两个布尔值的 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();
}
现在我不能再让它工作了。似乎主要问题在于构造函数类型不匹配。
感谢指出陷阱,原因和解决方案。谢谢!
主要问题是你为什么要这样做。你希望宏做什么,可以这么说,为什么你想让布尔值成为枚举?但是,要查看出了什么问题,您必须查看预处理器替换宏后的代码是什么样子的:
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类型的变量中。解决此问题的明显方法是删除宏。或者你需要解释为什么你需要它们。
#define bool Bool
之后,成员value
变为枚举布尔类型。
您正在尝试使用 &&&b 初始化它,它不是枚举布尔类型,而是基本布尔类型。
这就是您收到编译器错误的原因。
修复:将构造函数替换为:
logicAND(bool a,bool b):value((Bool)(a&&b)){};
相关文章:
- 写入向量<向量<bool>>
- 让bool方法返回其他整数
- 如何在 std::vector 中找到<bool>哪些索引是真的?
- Arduino-C++ bool 不会从 false 变为 true
- 为什么在这种情况下,bool 类型的输出等于 0?
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- 错误:不能使用"显式"说明符声明 bool'
- 为什么 C++ 11 在 ios 类中添加了运算符 bool
- 从标准::字符串到标准::矢量<bool>的快速转换
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 通过 mpi 发送 c++ 标准::矢量<bool>
- 为什么使用Pool和Bool而不是int8_t或char
- 如何为地图< map<int,int> 、bool > 分配值?
- 为什么更改包含 psapi.h 的顺序会产生编译错误?(标识符 BOOL 未定义)
- 使用 bool 和 const char 重载的 C++ 函数会在没有警告的情况下产生歧义 (MSVC2012)
- 返回 bool 作为 CPP 中 bool 运算符 [] 中的值
- 如何告诉自动推断向量<bool>元素的非引用类型
- 当 Type = bool 时,运算符 bool() 与模板 Type() 运算符冲突
- 为什么"std::set::erase(const key_type&)"返回"size_type"而不是"bool"?
- typedef, enum, bool, Bool ------confused