Как использовать функции C, которые имеют аргументы "this" в программе на C ++? - PullRequest
2 голосов
/ 23 июня 2010

Я хочу скопировать и вставить функцию C, найденную в другой программе, в свою программу C ++.
Один из аргументов функции использует указатель this.

void cfunction( FILE *outfilefd, const VARTYPEDEFINED this);

Ошибки компилятора C ++ здесь на прототипе функции:

error C2143: syntax error : missing ')' before 'this' 

Как мне сделать этот C ++ пригодным для использования?

Спасибо.

РЕДАКТИРОВАТЬ (за комментарий Betamoo)

void cfunction( FILE *outfilefd, const VARTYPEDEFINED this);
    {
    UINT8 temp = 0;

    temp = (UINT8)( this & 0x000000FF );

    if ( ( temp > LIMIT ) )
        ......
    else
    {
          ......
    }
}

Ответы [ 8 ]

8 голосов
/ 23 июня 2010

У вас есть два варианта.Вы можете оставить код как C и просто создать заголовок C ++, чтобы позволить вам вызывать этот код C из C ++:

#ifdef __cplusplus
extern "C" { 
#endif

    void cfunction(FILE *, const VAR);

#ifdef __cplusplus
}
#endif

Или вы можете переписать эту функцию достаточно, чтобы она скомпилировалась как C ++ (вероятно, простопереименуйте его параметр this во что-то еще, например thisvar).

6 голосов
/ 23 июня 2010

Переименуйте this во что-то другое. C не имеет специальной переменной this, это просто переменная, как и любая другая.

3 голосов
/ 23 июня 2010

Прежде всего, я бы рекомендовал оставить исходную функцию C без изменений.Поместите его в исходный файл C, скомпилируйте его, и this как имя переменной будет в порядке.В заголовке (где объявлена ​​функция) вы можете просто переименовать параметр или оставить его вне:

void cfunction( FILE *, const VAR);

(вам может понадобиться использовать extern "C" для получения связиверно, см. ответ Джерри Коффина).

2 голосов
/ 23 июня 2010

это зарезервировано в C ++, это не в C, поэтому измените это:

void cfunction( FILE *outfilefd, const VAR this);

до:

void cfunction( FILE *outfilefd, const VAR this1);
2 голосов
/ 23 июня 2010

Проблема только в том, что он пытается назвать параметр «this», который является зарезервированным словом в C ++? Если это так, я думаю, что единственным решением является переименование параметра. Вы также можете поместить функцию в ее собственный файл .c и скомпилировать ее с помощью компилятора C, а затем связать ее с вашей программой C ++ (конечно, прототип в программе C ++ должен будет опустить имена параметров и просто вставить типы, которые разрешены).

1 голос
/ 23 июня 2010

Известный пример этой проблемы (ключевые слова в C ++, которые не были ключевыми словами в C) встречается в X11. Поскольку X11 предшествовал популярности C ++, класс не был ключевым словом при написании X11. Но, работая с компиляторами C ++, многие заголовки X11 имеют объявления вроде следующего:

typedef struct {
    VisualID visualID B32;
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 bitsPerRGB;
    CARD16 colormapEntries B16;
    CARD32 redMask B32, greenMask B32, blueMask B32;
    CARD32 pad B32;
} xVisualType;
1 голос
/ 23 июня 2010

Я полагаю, что вы просто копируете / вставляете вместо того, чтобы фактически пытаться вызвать функцию C из программы C ++.Даже в противном случае, вы не можете просто переименовать параметр «this» во что-то еще, например «old_this»?

void cfunction( FILE *outfilefd, const VAR old_this);
1 голос
/ 23 июня 2010

this - зарезервированное слово в c ++. Это относится к экземпляру объекта в методе класса.

Вы можете переименовать параметр так, как вам будет угодно, если только он не является зарезервированным словом;)

К вашему сведению, если вы собираетесь много копировать и вставлять из "другой программы", рассмотрите возможность использования extern "C" { } и связывания с библиотеками c из другой программы. Это подробно описано в смешивании c и c ++ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...