无法弄清楚出现了什么问题:“之前预期的初级表达”''令牌“

时间:2013-08-07 16:05:01

标签: c++

不喜欢这个简单代码的第二行:

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');

代替。请介绍一下这种细微差别。

3 个答案:

答案 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)

应该做的。