![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| SoulSeeker |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 21.7.2008 Репутация: нет Всего: 2 |
Странная проблема возникла. Eclipse не видит функции в хедере. Не может вызвать функцию, объявленную в нем, выдавая ошибку: Undefined reference to test().
Вот пример простого С++ проекта: main.cpp:
inc.h:
inc.cpp:
У меня параллельно на эклипсе стоит Qt. Там все нормально. Может надо что-то в make файл прописывать? Подскажите, пожалуйста. Это сообщение отредактировал(а) SoulSeeker - 12.12.2009, 21:53 |
||||||
|
|||||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
Отвечу вопросом.
Как из main.cpp компилятор увидит определение функции test(), находящееся в inc.cpp, если в хедере есть только объявление? |
|||
|
||||
| SoulSeeker |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 21.7.2008 Репутация: нет Всего: 2 |
Это стандартная практика - объявления функций отдельно от реализации. В студии так всегда делаю без особых проблем. Там компилятор сам смотрит в одноименный *.cpp файл и находит реализованную функцию. Как тогда посоветуете быть в этом случае?
|
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
У меня все работает.
1) Попробуй поставить в хедере перед функцией слово extern. 2) Есть вариант просто заинклудить cpp файл и забить. При этом думаю нет смысла его непосредственно компилировать и прилинковывать к проекту. |
|||
|
||||
| SoulSeeker |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 21.7.2008 Репутация: нет Всего: 2 |
C extern не прокатило. Какой тип проекта ты создаешь? У меня все шаблоны проектов потом приходится руками допиливать - прописывать пути к библиотечным инклудам. Может быть, у меня неправильный эклипс?
|
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
С первым постом я погарячился, т.к. все мои проекты, кстати их делал в эклипсе, сделаны по стандартной системе, описанной в первом посте, а последнее время все чаще сижу на шаблонах, где такое разделение невозможно.
В принципе от типа проекта это не должно зависеть. Пути к инклудам прописывать приходилось только в случае с собственными проектами зависящими от другого моего проекта, т.е. дополнительные пути внутри проектов. Пользуюсь всегда самым последним эклипсом в сборке для C++ программирования (CDT). MinGW GCC ставил в папку по умолчанию, эклипс все находил. С linux еще проще, все цепляется автоматом, пути к стандартным заголовочным файлам в созданных проектах пробиваются сами. С make-файлами разбираться досконально не приходилось (в целом они полностью расписаны в IDE как свойства проекта). Может там что не так, но если так, то виновата сборка эклипса, а я с такой проблемой не сталкивался, хотя сижу на эклипсе уже давольно давно, релиза три как минимум. В общем, попробуй MinGW GCC (если конечно у тебя не linux) переставить в умолчальную папку или другую сборку эклипса. |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
SoulSeeker,
fry, Что-то вы по бурьянам пошли -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
Всмысле?
|
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
В прямом. Зная гнутый компилятор, и его сообщения, я почти уверен что это именно - unresolved external ;) Добавлено через 1 минуту и 25 секунд Скорее всего, inc.cpp не включен в сборку. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
Ну тогда, надеюсь, автор позаботился о видимости cpp файла для эклипса, ну и соответственно самого компилятора. Иаче действительно зря время потрачено.
|
|||
|
||||
| SoulSeeker |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 21.7.2008 Репутация: нет Всего: 2 |
Поставил MinGW с нуля - теперь все видит, и проекты правильные создаются. fry, спасибо ;)
|
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Дело то не в этом ;) Расскажи, какая причина была на самом деле? -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| SoulSeeker |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 21.7.2008 Репутация: нет Всего: 2 |
Ну, во-первых, до этого я использовал mingw, который шел с Qt, и при создании не qt проектов у меня даже не появлялись настройки для debug и release и все пути к инклудам сам прописывал. Во-вторых, все файлы были подключены к проекту, никаких unresolved external не вываливалось, только Undefined reference to test().
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |