1

この単純なコードの 2 行目は好きではありません。

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>は 1 文字あたりの実際のビット数を定義し、8 にハードコーディングするよりも明らかに移植性が高くなります。

于 2013-08-07T16:07:15.307 に答える
2

定義により、疑わしいセミコロンが挿入されています

#define charbits 8*sizeof(char);

それを削除すると、エラーが解消されます。

イベントは、#define ではなく static const に変更することをお勧めします。これはまさにこの理由でお勧めできません。

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

プリプロセッサは次のように置き換えます 。問題は、手動charbitsで置き換えたときにはなかったものです。したがって、8*sizeof(char);;

#define charbits 8*sizeof(char)

仕事をするべきです。

于 2013-08-07T16:09:55.183 に答える