Объявление в C считается определением в C ++ - PullRequest
3 голосов
/ 28 марта 2020

Я работаю над файлом C с открытым исходным кодом, содержащим следующее объявление

static PyTypeObject Bitarraytype;

, за которым следует определение

static PyTypeObject Bitarraytype = {
    /* A bunch of stuff */ 
};

Я портирую этот код на C ++ ( -std=C++2a), однако вышеупомянутое объявление и определение больше не допускаются, так как оно утверждает error: redefinition of 'Bitarraytype'

Я не уверен, что является причиной этого, так как первый блок выше - только объявление из моего понимания. Почему это не работает в C ++ и как я могу обойти это?

1 Ответ

1 голос
/ 28 марта 2020

Объявление, которое вы показываете, на самом деле является предварительным определением в C. В C ++ этого нет, поэтому вы получаете ошибку множественного определения.

Объявление должно быть помечено extern, чтобы пометить его как объявление:

extern PyTypeObject Bitarraytype;

Вам также понадобится удалить ключевое слово static, так как они несовместимы.

...