1

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

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

反而。请让我对这种细微差别有所了解。

4

3 回答 3

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_BITin<climits>定义了每个字符的实际位数,并且显然比硬编码到 8 更便携。

于 2013-08-07T16:07:15.307 回答
2

由于您的定义,您被插入了一个假分号

#define charbits 8*sizeof(char);

删除它,您将摆脱错误。

Event 最好将其更改为静态 const 而不是 #define,因为这个原因不鼓励这样做。

static const size_t charbits = 8 * sizeof(char);
于 2013-08-07T16:07:27.580 回答
1

预处理器替换charbits8*sizeof(char); 问题是;您手动替换它时没有的问题因此,

#define charbits 8*sizeof(char)

应该做的工作。

于 2013-08-07T16:09:55.183 回答