Russian Qt Forum

Компиляторы и платформы => Компиляторы => Тема начата: Urvin от Сентябрь 29, 2009, 21:39



Название: [mingw 3.81] undefined reference
Отправлено: Urvin от Сентябрь 29, 2009, 21:39
C чем может быть связано появление ошибки undefined reference to 'имя функции', если к проекту подключены заголовок .h, текст программы .c и при этом заголовок и тело функции соответственно находятся в подключенных .h и .c?


Название: Re: [mingw 3.81] undefined reference
Отправлено: BlackTass от Сентябрь 30, 2009, 07:49
может проще код выложить сюда?


Название: Re: [mingw 3.81] undefined reference
Отправлено: SimpleSunny от Сентябрь 30, 2009, 08:27
Если используется Qt и сигналы / слоты, то возможно пропущен макрос Q_OBJECT.
Если просто компилируете mingw, то возможно не указали mingw, какие фалы необходимо компилировать.

А по существу экстрасенсорика в последнее время не в почёте, поэтому выкладывайте больше информации.


Название: Re: [mingw 3.81] undefined reference
Отправлено: kuzulis от Сентябрь 30, 2009, 09:13
А может пропущен 0 в объявлении виртуыльной функции (это если классы есть)


Название: Re: [mingw 3.81] undefined reference
Отправлено: spectre71 от Сентябрь 30, 2009, 09:38
C чем может быть связано появление ошибки undefined reference to 'имя функции', если к проекту подключены заголовок .h, текст программы .c и при этом заголовок и тело функции соответственно находятся в подключенных .h и .c?
Покажи соответствующий код!


Название: Re: [mingw 3.81] undefined reference
Отправлено: Urvin от Сентябрь 30, 2009, 10:03
Я думал есть некоторое волшебное средство для общих случаев ::)

В подключаемом модуле нет классов и вообще не используются методы Qt, хотя и подключаю к проекту на Qt.
Модуль, к сожалению, писан не мной, я бы класс нафигачил.

Подключаю hiddata.h и hiddata.c, они же соответствующим образом прописываются в файле проекта.
В mainwindow.h добавляю #include hiddata.h.

Для того, чтобы сильно сопли не размазывать, рассмотрим функцию usbhidCloseDevice, в заголовке выглядит так:
Код
C++ (Qt)
void usbhidCloseDevice(usbDevice_t *device);

Тело функции в hiddata.c:
Код
C++ (Qt)
void    usbhidCloseDevice(usbDevice_t *device)
{
   CloseHandle((HANDLE)device);
}

При компиляции получаем undefined reference to 'usbhidCloseDevice(usbDevice_t*)'
И сообщение-то не о несуществующей функции(

Вот архивчик с лысым проектом на Qt: tControl_gui.rar (http://narod.ru/disk/13669223000/tControl_gui.rar.html)


Название: Re: [mingw 3.81] undefined reference
Отправлено: zenden от Сентябрь 30, 2009, 10:20
в файле mainwindow.h

Код
C++ (Qt)
// Подключение модуля для общения по USB
extern "C"
{
#include "hiddata.h"
}


Название: Re: [mingw 3.81] undefined reference
Отправлено: Urvin от Сентябрь 30, 2009, 10:34
Вот люблю я попадать на такие мелочи просто по незнанию.

Теперь все работает как часы! Спасибо!  :D