私有函数声明gcc vs msvc

时间:2013-01-24 11:56:35

标签: c visual-studio-2010

我不是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有效吗?

3 个答案:

答案 0 :(得分:1)

C ++在声明

中需要这个
private:
 drawlist * drawlist_append(p2mem *mem, drawlist_head *head) { ..... }

private之后的所有内容都是私密的。

C没有privatepublic等概念。

答案 1 :(得分:1)

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

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

如果drawlist_append是一个独立的功能,你只需删除private,你可以试试这个:

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

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

#define private static

答案 2 :(得分:1)

此代码依赖于以下内容:

#ifndef private
# define private static
#endif

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

我建议您添加

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

到文件的顶部,或者只是将“private”替换为“static”。