2013-01-24 2 views
0

저는 프로그래머가 아니므로 MSVC와 잘 컴파일 된 프로젝트에 패치를 적용하려고하지만 패치는 * nix에 제공됩니다. 내가 nmake와 패치 프로젝트를 컴파일 할 때 나는이 오류를 얻을 :이 오류가 발생개인 함수 선언 gcc vs msvc

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 + + 프로그래머 아니에요 언급했듯이, 코드를 변경하는 방법을 모르겠다. 아무도 MSVC에 대해 유효하도록이 private 함수 호출을 변경하는 방법을 지원할 수 있습니까?

+0

이것은 C++가 아니라 C입니다. – molbdnilo

답변

1

이 없습니다 만 제거하면 다음을 시도 할 수 있습니다.

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

다른 가능성은 패치 제공자가 private 대신 static을 의미한다는 것입니다. 당신은 * 괜찬아 C에 대한 매크로 아래 추가 시도 할 수 :

#define private static 
+0

그것은 독립 실행 형 함수이며 마지막 줄은 잘 전달되지만, 예를 들어'private int','private void'와 같은 많은 함수가있는 것처럼 보입니다 ... "private '줄을 모두 제거해야합니까? – theta

+0

if 그들은 모두 클래스 안에 있지 않습니다. C++이 아닌 C 코드입니다. – billz

1

C++는 선언에 private는, 음, 개인 것을 다음

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

모든 것을이 필요합니다. drawlist_append 독립 기능의 경우,

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

을 : drawlist_appendclass 내부에 선언 된 멤버 함수 인 경우

C 당신은 시도 할 수, 같은 private 같은 개념, public

1

이 코드는 다음에 의존 :

#ifndef private 
# define private static 
#endif 

불행하게도, 이미 마이크로 소프트의 컴파일러와 장소에 확장이있다.

난 당신이 파일의 상단에

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

를 추가하거나 전역 "정적"와 "개인"교체 할 것을 제안한다.

+0

고마워요, 이것도 효과가있는 것 같아요. – theta