2

次の関数に関して「void式の無効な使用」エラーが発生します。

void remove_data(char* memory, char* bitmap, int pos)
{
    int i;

    i = (int)test_bit(bitmap, pos-1);

    if(i != 0)
    {
        memory[pos-1] = NULL;
        toggle_bit(bitmap, pos-1);
    }
}

この同様の問題に関して他のスレッドで読んだことから、プログラマーが出力を生成する関数内で何かを使用すると、このエラーがポップアップします。しかし、私が書いたコードでは、何が原因でそれが発生するのかわかりません。

編集して追加:

その中で使用されているトグルビット関数もvoid型であり、値を返しません。

void test_bit(char * bitmap, int pos)
{
    int bit;

    bit = bitmap[pos/8] & (1<<(pos%8));
    printf("%d\n", &bit);
}

test_bitのprintf行にコメントしましたが、エラーはまだあります。

4

4 に答える 4

8

しかし、私が書いたコードでは、何が原因でそれが発生するのかわかりません。

私も、あなたが関連するコードを投稿したとは思わないので。とにかく、これはおそらくあなたの問題だと思います:

i = (int)test_bit(bitmap, pos-1);

の署名を見せてくださいtest_bit。私はそれが戻ってくると思いますvoid、またはあなたはそれをどこかで前方宣言し、誤って書いた:

void test_bit(char*, int);

関数はvoid(つまり、何も)返さないので、あなたがしているように戻り値(つまり何もない)をにキャストすることはできませんint。それは意味がなく、違法です。

test_bit編集:あなたは実際に戻ると宣言されているコメントで確認したvoidので、それがあなたの問題です。

于 2012-10-08T16:58:10.780 に答える
0

test_bit は void であるため、( のようにi = (int)test_bit(bitmap, pos-1);)その戻り値を使用することはできません。戻り値はありません

于 2012-10-08T16:59:47.980 に答える
0

あなたが書いた

 i = (int)test_bit(bitmap, pos-1);

なぜキャストを持っているのですか?

関数が

void test_bit(char * bitmap, int pos)
{
    int bit;

    bit = bitmap[pos/8] & (1<<(pos%8));
    printf("%d\n", &bit);
}

どうやって void を整数に変換できますか?

于 2012-10-08T17:05:39.957 に答える