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


Автор: Tiffany 6.6.2008, 10:54
Есть такое дело... Заголовочный файл (MyThread.h), содержащий соответствующий класс инклудится в другой файл (файл формы). Все работает. НО когда я хочу этот же файл приинклудить к другой форме вылазит ошибка:
http://ipicture.ru/

Приведу куски текстов файлов:
form0.ui.h - файл главной формы
Код


//////////////////////////////
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <sys/time.h>
#include <qstring.h>
///////////////// user includes
#include "MyThread.h"



#include <fcntl.h>
#include <termios.h>


#define _POSIX_SOURCE 1

// далее текст проги


MyThread.h - файл который инклудим
Код

#ifndef MyThreadH
#define MyThreadH
#include "TRemoteControl.h"
#include <qthread.h>
#include <qapplication.h>

#define DEVICE "/dev/ttyM3"
//описание класса
#endif


TRemoteControl.h - описание класса используемого в MyThread.h (здесь выдает ошибку)
Код

#ifndef TRemoteControlH
#define TRemoteControlH

#include <fcntl.h>
#include <qfile.h>
#include <termios.h>
#include <qmutex.h>

//делаем много интересного...

bool TRemoteControl::TxBuffer(char* lpBuffer, unsigned long int nNumberOfBytesToWrite)
{
  unsigned long TXReal;

  bzero(TransportBuffer,sizeof(TransportBuffer));
  memcpy(TransportBuffer,lpBuffer,nNumberOfBytesToWrite);

  TransportBuffer[nNumberOfBytesToWrite]=0x03;
  nNumberOfBytesToWrite++;

  TXReal=write(DeviceHandle, TransportBuffer,nNumberOfBytesToWrite); //вот тут ругается
  f1.flush();

}


Буду очень признательна за помощь, а то я свой бубен дома забыла  smile 

Автор: MAKCim 6.6.2008, 11:26
Tiffany, 
в *.h файлах не должно быть определений методов
вынеси TxBuffer в TRemoteControl.cpp

Автор: Peter 6.6.2008, 15:40
Как я понял, компилятор не узнал функцию write(). Вот он и говорит: "Implicit declaration...". Значит, он ее не нашел в заголовочных файлах.

Добавлено через 3 минуты и 18 секунд
Что если подключить io.h?

Автор: Tiffany 7.6.2008, 10:42
Peter, дык в первом случае-то все находил. Ну лан, када я все инклуды из form0.ui.h перетащила в MyThread.h - полезла куча ошибок в духе:
Код

Redefinition of function ...
First declared there ...


Как-то так. Т.е. функция write() уже устраивает, но ругается на повторное объявление других... Вооот, 
MAKCim, это я сеня канешн попробую, хотя реализация может находиться в файле с заголовками, но мало ли smile

Автор: Alexeis 7.6.2008, 10:59
Tiffany, скорее всего множественное включение заголовочных файлов. Нужно поместить заголовочный файл в "скобки" из

#if !defined(<уникальный идентификатор>)
#define <уникальный идентификатор>

тут код заголовков

#endif

Автор: Tiffany 7.6.2008, 13:35
Alexeis, так и сделано, смари код  smile 

Автор: Peter 11.6.2008, 12:07
Цитата(Tiffany @  7.6.2008,  10:42 Найти цитируемый пост)
ругается на повторное объявление других

Конечно! Получается, в нескольких .CPP сидит тело одной и той же функции. Компилятор на это и ругается. Тело функции может присутствовать в проекте только один раз.
В заголовочных файлах можно объявлять шаблоны (template) функций, поскольку из них объектный код не генерируется.

Автор: Torsten 11.6.2008, 13:48
Tiffany, 
int write() - это твоя функция или библиотечная ?
Если твоя напиши как ее обьявляешь (то как она в хедере выглядит).

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