multiple definitions |
Здравствуйте, гость ( Вход | Регистрация )
multiple definitions |
void* |
22.4.2010, 21:37
Сообщение
#1
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
Всем привет. Есть один маленький проектик, при компиляции которого Qt Creator ругается на то что одни и те же функции объявляются несколько раз. Скорее всего это из-за множественного включения одних и тех же файлов, но как этого избежать и из-за чего именно это не понимаю). Структура такая(инклюдов):
defines.h #ifndef DEFINES_H #define DEFINES_H //... #endif // DEFINES_H calculations.h #ifndef CALCULATIONS_H #define CALCULATIONS_H #include "defines.h" //... #endif // CALCULATIONS_H iterationsdialog.h #ifndef ITERATIONSDIALOG_H #define ITERATIONSDIALOG_H #include "calculations.h" //... #endif // ITERATIONSDIALOG_H iterationsdialog.cpp #include "iterationsdialog.h" #include "iterationtable.h" //... iterationtable.h #ifndef ITERATIONTABLE_H #define ITERATIONTABLE_H #include "calculations.h" //... #endif // ITERATIONTABLE_H iterationtable.cpp #include "iterationtable.h" //... Ну и в файлах MainWindow уже подключается iterationsdialog.h и используется. Так вот проблема собственно в том, что все функции, описанные в calculations.h почему-то описываются несколько раз, на что и ругается компилятор... как это исправить? Сообщение отредактировал void* - 22.4.2010, 21:38 |
|
|
Litkevich Yuriy |
23.4.2010, 0:07
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
сразу полная реализация функций в этом-то и проблема. Си не паскаль. Разноси объявление в h, реализацию в cppА чтоб понять почему так: возьми cpp и мысленно воткни на место директивы препроцессора целиком соответствующий файл. Т.е. на место #include "filename", воткни сам файл с именем filename А потом представь, что каждый cpp компилируется в o, затем линкер соединяет эти o-файлы в исполняемый бинарь. И теперь подумай, как этот, последний, процесс выглядит и компилятор ругается error: collect2: ld returned 1 exit status заметь, ругается не компилятор
|
|
|
Текстовая версия | Сейчас: 29.11.2024, 12:29 |