0

私はCプログラマーではなく、MSVCで正常にコンパイルされるプロジェクトにパッチを適用しようとしていますが、パッチは*nix用に提供されています。パッチを適用したプロジェクトをコンパイルしようとすると、次のnmakeエラーが発生します。

error C2054: expected '(' to follow '__private'

このエラーを発生させるコードは次のとおりです。

private drawlist *
drawlist_append(p2mem *mem, drawlist_head *head)
{
    drawlist *d = p2mem_alloc(mem, sizeof(drawlist));
    if (!d) return 0;
    memset(d, 0, sizeof(drawlist));
    d->color = gx_no_color_index;
    d->next = 0;
    d->prev = head->last;
    head->last = d;
    (d->prev) ? (d->prev->next = d) : (head->first = d);
    return d;
}

グーグルで見ると、MSVCはこの種の宣言を受け入れていないのではないかと思いますが、前述のように私はC / C ++プログラマーではないため、コードを変更する方法がわかりません。private誰かがこの関数呼び出しをMSVCで有効になるように変更する方法を支援できますか?

4

3 に答える 3

1

このコードは、以下に依存しています。

#ifndef private
# define private static
#endif

残念ながら、Microsoftのコンパイラにはすでに拡張機能があります。

追加することをお勧めします

#ifdef private
#undef private
#endif
#define private static

ファイルの先頭に移動するか、全体で「private」を「static」に置き換えます。

于 2013-01-24T12:06:28.477 に答える
1

C++は宣言でこれを必要とします

private:
 drawlist * drawlist_append(p2mem *mem, drawlist_head *head) { ..... }

その後のすべてprivateは、まあ、プライベートです。

privateCには、publicなどの概念はありません。

于 2013-01-24T11:58:47.613 に答える
1

drawlist_appendが内部で宣言されたメンバー関数である場合class、次のことを試すことができます。

private:
drawlist* drawlist_append(p2mem *mem, drawlist_head *head)

drawlist_appendがスタンドアロン関数の場合は、削除するだけprivateで、次のことを試すことができます。

drawlist* drawlist_append(p2mem *mem, drawlist_head *head)

もう1つの可能性は、パッチプロバイダーがstaticの代わりに意味することですprivate。*nixCの以下のマクロを追加してみてください。

#define private static
于 2013-01-24T12:01:22.217 に答える