Включите заголовок C со сложными типами с плавающей запятой в C++.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Включите заголовок C со сложными типами с плавающей запятой в C++.

Сообщение Anonymous »

Я не могу найти простой способ включить заголовок C в сложные типы C в C++. Предположим, у вас есть следующие файлы:

Код: Выделить всё

c_source.h

Код: Выделить всё

#include 

#ifdef __cplusplus
extern "C"
{
#endif

double complex arg_d(double complex z);

#ifdef __cplusplus
}
#endif

Код: Выделить всё

c_source.c

Код: Выделить всё

#include "c_source.h"

double complex arg_d(double complex z)
{
return carg(z);
}
И, наконец, на стороне C++: cpp_source.cpp

Код: Выделить всё

#include "c_source.h"
#include 
int main()
{
std::complex result;
result = arg_d(5);

return 0;
}
Это небольшое доказательство концепции библиотеки C, использующей сложные типы C, для которых я хочу предоставить привязки/оболочки C++. Сторона C++ не поддерживает сложные типы C напрямую, а через класс std::complex. Мне просто не удается соединить тип C с C++. Когда я компилирую с использованием g++, я получаю следующее:

Код: Выделить всё

In file included from cpp_source.cpp:1:
c_source.h:8:20: error: expected initializer before ‘arg_d’
8 |     double complex arg_d(double complex z);
|                    ^~~~~
cpp_source.cpp: In function ‘int main()’:
cpp_source.cpp:6:14: error: ‘arg_d’ was not declared in this scope
6 |     result = arg_d(5);
|              ^~~~~
Как лучше всего это исправить? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/798 ... types-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»