Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > помогите QT + Си


Автор: cooper123 11.11.2007, 18:35
В QT туториал 9  решил добавить свою 


#include <math.h>
int myfunc(int i)
{
    float jj;
    jj=i/22.0;
        return (int)( 54.0 * sin(jj));
}

для изображения. в приложении соответствующего графика. 
если записываю ее в файл    myfunc.cpp 
c соответствующими йзменениям в projekt.pro
то все нормально а если записываю в си файл  myfunc.c
то файл компилится но при связке, насколько я понимаю, выдается ошибка

release/cannonfield.o(.text+0x1660):cannonfield.cpp: undefined reference to `myfunc(int)'

у меня просто написано на си и хочется без больших изменений собственно отображать результаты в QT теперь все переписывать в си++ или есть возможность сделать смешаный проект из си и си++?

заранее спасибо. 

Автор: bsa 11.11.2007, 19:31
Можно сделать смешанный проект. Только не забудь, чтобы вызвать функцию, находящуюся в модуле c++ из модуля си и наоборот, надо чтобы в ее декларации для C++ модуля было указано extern "C": module.h:
Код
...
#ifdef __cplusplus
extern "C" {
#endif //__cplusplus

int myfunc(int e);

#ifdef __cplusplus
} //extern "C"
#endif //__cplusplus
...
module.cpp:
Код
#include "module.h"
...
extern "C" int myfunc(int e)
{
       ...
}
...
Естественно, что в заголовочных файлах, подключаемых в сишных модулях, не должно быть ничего из C++.

А потом, тебе никто не мешает сменить расширение у имеющихся исходников на cpp.

Автор: Любитель 22.11.2007, 18:54
Цитата(bsa @  11.11.2007,  19:31 Найти цитируемый пост)
А потом, тебе никто не мешает сменить расширение у имеющихся исходников на cpp. 

В общем случае сборка сишного сорса плюсовым компилером не гарантирована.

Автор: archimed7592 23.11.2007, 22:33

M
archimed7592
Тема перенесена из С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets


Добавлено через 2 минуты и 41 секунду

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)