Форум программистов, компьютерный форум CyberForum.ru

Использование функции cpp в проекте c - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Быстрота работы http://www.cyberforum.ru/cpp-beginners/thread924518.html
Скажите, какой алгоритм на языке C++ будет выполняться быстрее, если мы не знаем величину массива: в котором я создам сразу большой массив, а буду использовать только часть. Или быстрее будет динамическое выделение памяти?
C++ Как записывать в массив с 2 переменными текст Как записывать в массив с 2 переменными,текст,тоесть есть массив mas, в а="привет", в b="пока"; http://www.cyberforum.ru/cpp-beginners/thread924505.html
C++ stack around the variable was corrupted масив через указатель
Такая проблема - создаю масив целых чисел через функцию с использованием указателей - выскакивает данная ошибка, хотя код работает верно, почитал - что где-то идет переполнение, но как избавиться ума не приложу... Создается 4ре масива разной длины по-очередно, каждый масив внутри функции заполняется уникальными (неповторяющимися) числами по всему диапазону. Помогите пожалуйста. #include...
Начало пути прогера C++
Здравствуйте. Мне 19, перешел на 3 курс по специальности "Компьютерная безопасность". Уже 2 года периодически интересуюсь программированием, почитал некоторые книжки, попробовал написать код и каждый раз утыкаюсь на одну и ту же проблему - не где опробовать знания. Нет, я понимаю что можно писать всякую фигню для себя, но это скучно и нету какой то особой мотивации на конкретный проект, что бы...
C++ Составить блок-схему http://www.cyberforum.ru/cpp-beginners/thread924447.html
#include <iostream> #include <string> #include <iomanip> using namespace std; struct PRICE{ string tovar; string shop; int price; }; int main()
C++ Число int в десятичной преобразовать в char - двоичной Помогите пожалуйста. Ситуация похожа, код прилагается - нужно число int в десятичной преобразовать в char - двоичной, совсем запутался в указателях. В итоге в _result выводится абракадабра, пробовал и itoa и sprintf. #include "stdafx.h" #include <iostream> #include <ctime> #include <string.h> using namespace std; void NumberAsBinary( char* _result, unsigned int _number подробнее

Показать сообщение отдельно
tiger()
3 / 3 / 0
Регистрация: 20.04.2011
Сообщений: 141
17.07.2013, 13:18     Использование функции cpp в проекте c
Есть сишный проект, понадобилось прикрепить к нему один готовый плюсовый модуль.

Схематичный вид этого модуля:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//module.cpp
namespace module_namespace
{
  struct params
  {
    inline params() : field1(val1), field2(val2), field3(val3), field4(val4) { }
 
    inline type foo() const
    {
    ...
    }
 
    type1 field1;
    type2 field2;
    type3 field3;
    type4 field4;
  };
 
...
 
bool abc(const params &comp_params = params());
 
}
Мне нужно: воспользоваться функцией abc из сишного main.
Но параметр функции - плюсовая структура с конструктором, из си никак не вызывается напрямую.

1. Создал отдельный header (extern_api.h), подключил его и к модулю и к main.
2. Описал в extern_api.h новую структуру params_c, которая содержит только поля, но не содержит конструкторов (чтобы было как си без плюсовых наворотов).
3. Сделал в модуле функцию-прокси abc_c, которая вызывается из си и из себя вызывает abc. Вместо params имеет параметр params_c, так что теперь ее можно вызывать из си.

C++
1
2
3
4
5
//add to module.cpp
 bool abc_c(const params &comp_params = params())
    {
        return abc(comp_params);
    }
4. Добавил в структуру params еще один конструктор, который будет инициализироваться от типа params_c.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//updated module.cpp
  struct params
  {
    inline params() : field1(val1), field2(val2), field3(val3), field4(val4) { }
    inline params(params_c* p): field1(p->field1), field2(p->field2), field3(p->field3), field4(p->field4) { }
 
    inline type foo() const
    {
    ...
    }
 
    type1 field1;
    type2 field2;
    type3 field3;
    type4 field4;
  };
5. Вытащил в exterm_api.h объявление abc_c.

C++
1
2
3
4
5
6
7
8
9
10
//extern_api.h
    typedef struct
    {
       type1 field1;
       type2 field2;
       type3 field3;
       type4 field4;
    } params_c;
 
extern  bool abc_c(const params_c *comp_params);
6. Встроил в систему makefile'ов этот модуль, скомпилировал как библиотеку .a, прикрепил либу к main. То есть main теперь видит либу .a, где определена abc_c и видит extern_api.h, где она объявлена.

Получаю undefined reference к abc_c.

Либа нормальная, компилится без ошибок, формат читаемый, имя функции фигурирует.

Пробовал различные комбинации с
C++
1
2
3
    #ifdef __cplusplus
    extern "C" {
    #endif
- не помогло. Куда это правильно поставить?

Еще есть ошибки с передачей параметра в abc, т.к. в объявлении и определении abc_c стоят параметры разных типов.

Как правильно настроить такую систему? Подскажите, пожалуйста, может я какую-нибудь ошибку не заметил..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru