| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > multiple definition |
| Автор: kuvshinka 23.9.2011, 22:14 | ||
смысл следующий - в 2 модулях - mainwindow и unit2 мне надо использовать данные из массива objStruk - соотвественно чтобы получить к нему доступ надо подключить файл его описания - module1.cpp, на что в модуле unit2.cpp выдаются ошибки: error: multiple definition of ‘objStruk’ first defined here: mainwindow.cpp как мне исправить эту ошибку при условии того, что структуру модуля module1 трогать нежелательно... |
| Автор: kuvshinka 23.9.2011, 23:56 |
| mes: Вы имеете ввиду, что надо вместо module1.cpp подключать module1.h? это я и сама так думала, но тогда все равно в модуле unit2.cpp (то есть там, где я пытаюсь использовать массив objStruk) уже в ввиде "вопроса" (в синем кружке знак вопроса) пишется undefined reference to objStruk (что верно, ведь массив объектов структуры objStruk, который я пытаюсь использовать, инициализирован в cpp-файле, а я подключаю хедер) и ошибка collect2: ld returned 1 exit status |
| Автор: mes 24.9.2011, 12:36 |
не все равно, а другая ошибка.. у вас не прилинкована та часть в которой массив.. |
| Автор: kuvshinka 24.9.2011, 12:47 |
| mes: а как ее прилинковать? как исправить эту ошибку? |
| Автор: mes 24.9.2011, 13:38 |
если компилируете в IDE, то добавить исходник к проекту.. |
| Автор: volatile 24.9.2011, 15:38 |
| kuvshinka, в .h файле напишите: extern const StrukData objStruk[10]; и подключайте его где нужно, сколько угодно. а .cpp оставьте только 1 раз. |
| Автор: kuvshinka 24.9.2011, 18:31 |
| mes: я компилирую в Qt Creator-e 4.6....какой именно исходник надо подключить к проекту? у меня и так все указанные выше модули (их cрр- и h -файлы) подключены в pro-файле проекта... Добавлено через 11 минут и 59 секунд volatile: в каком именно моем h - файле надо написать: extern const StrukData objStruk[10]; и что значит "а .cpp оставьте только 1 раз." (опять же какой именно cpp-файл и что значит "оставить"?) |
| Автор: volatile 24.9.2011, 22:23 |
Это ваш сипипи. Назовём его kuvshinka.cpp Его дабавляете в проект 1 раз, естественно. И никуда больше не включаете. А это ваш хедер, назовём его kuvshinka.h Ну и там где надо, (да не запрещено даже там, где не надо), добавляете: #include “kuvshinka.h” |
| Автор: mes 25.9.2011, 12:15 | ||
const по умолчанию имеет внутренее связывание, поэтому в cpp также нужно не забыть extern
|
| Автор: math64 26.9.2011, 09:33 | ||
Можно ещё так:
|