不喜欢这个简单代码的第二行:
string str = "Jamin rules";
string str2(str.length()*charbits, '0');
错误是
error: expected primary-expression before ')' token
compilation terminated due to -Wfatal-errors.
你知道吗,
charbits
是由
定义的变量 #define charbits 8*sizeof(char);
我认为这是问题,因为当我输入
时代码可以正常工作 string str2(str.length()*8, '0');
代替。请介绍一下这种细微差别。
答案 0 :(得分:8)
#define charbits 8*sizeof(char);
不应以;
结尾,而是将其扩展为;
string str2(str.length()*8*sizeof(char);, '0');
由于sizeof(char)定义为1,因此您可以将定义更改为简单;
#define charbits 8
......或作为一个简单的常数;
#include <stddef.h>
const size_t charbits = 8;
编辑:正如@keiththompson在下面指出的那样,CHAR_BIT
中的<climits>
定义了每个字符的实际位数,并且显然比硬编码更容易移植到8。
答案 1 :(得分:2)
由于您的定义,您插入了一个多重的分号
#define charbits 8*sizeof(char);
删除它,你将摆脱错误。
事件最好将其更改为静态const而不是#define,因此不鼓励这样做。
static const size_t charbits = 8 * sizeof(char);
答案 2 :(得分:1)
预处理器将charbits
替换为8*sizeof(char);
问题是您手动更换时没有的;
因此,
#define charbits 8*sizeof(char)
应该做的。