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

C++ 会在声明中要求这个

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

接下来的一切都是private私人的。

C没有诸如private等的概念public

于 2013-01-24T11:58:47.613 回答
1

如果drawlist_append是内部声明的成员函数class,您可以尝试:

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

如果 drawlist_append 是一个独立的函数,你只需 remove private,你可以试试这个:

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

另一种可能性是补丁提供者的意思是static而不是private. 您可以尝试为 *nix C 添加以下宏:

#define private static
于 2013-01-24T12:01:22.217 回答
1

此代码依赖于以下内容:

#ifndef private
# define private static
#endif

不幸的是,微软的编译器已经有了一个扩展。

我建议你添加

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

到文件的顶部,或者只是将“私有”替换为“静态”。

于 2013-01-24T12:06:28.477 回答