Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Eclipse, MinGW, Не видит функции в хедерах и сами хедеры 
V
    Опции темы
SoulSeeker
Дата 12.12.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 21.7.2008

Репутация: нет
Всего: 2



Странная проблема возникла. Eclipse не видит функции в хедере.  Не может вызвать функцию, объявленную в нем, выдавая ошибку: Undefined reference to test(). 
Вот пример простого С++ проекта:

main.cpp:
Код

#include "inc.h"

int main(void) {
    return test();
}



inc.h:
Код

int test();


inc.cpp:
Код

int test()
{
    return 1;
}



У меня параллельно на эклипсе стоит Qt. Там все нормально. Может надо что-то в make файл прописывать? Подскажите, пожалуйста.



Это сообщение отредактировал(а) SoulSeeker - 12.12.2009, 21:53
PM MAIL WWW   Вверх
fry
Дата 13.12.2009, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: нет
Всего: 3



Отвечу вопросом.

Как из main.cpp компилятор увидит определение функции test(), находящееся в inc.cpp, если в хедере есть только объявление?
PM MAIL   Вверх
SoulSeeker
Дата 13.12.2009, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 21.7.2008

Репутация: нет
Всего: 2



Это стандартная практика - объявления функций отдельно от реализации. В студии так всегда делаю без особых проблем. Там компилятор сам смотрит в одноименный *.cpp файл и находит реализованную функцию. Как тогда посоветуете быть в этом случае?
PM MAIL WWW   Вверх
fry
Дата 13.12.2009, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: нет
Всего: 3



У меня все работает.
1) Попробуй поставить в хедере перед функцией слово extern.
2) Есть вариант просто заинклудить cpp файл и забить. При этом думаю нет смысла его непосредственно компилировать и прилинковывать к проекту.
PM MAIL   Вверх
SoulSeeker
Дата 13.12.2009, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 21.7.2008

Репутация: нет
Всего: 2



C extern не прокатило. Какой тип проекта ты создаешь? У меня все шаблоны проектов потом приходится руками допиливать - прописывать пути к библиотечным инклудам. Может быть, у меня неправильный эклипс?  smile Qt проекты собираются без нареканий.
PM MAIL WWW   Вверх
fry
Дата 13.12.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: нет
Всего: 3



С первым постом я погарячился, т.к. все мои проекты, кстати их делал в эклипсе, сделаны по стандартной системе, описанной в первом посте, а последнее время все чаще сижу на шаблонах, где такое разделение невозможно.

В принципе от типа проекта это не должно зависеть. Пути к инклудам прописывать приходилось только в случае с собственными проектами зависящими от другого моего проекта, т.е. дополнительные пути внутри проектов.

Пользуюсь всегда самым последним эклипсом в сборке для C++ программирования (CDT). MinGW GCC ставил в папку по умолчанию, эклипс все находил. С linux еще проще, все цепляется автоматом, пути к стандартным заголовочным файлам в созданных проектах пробиваются сами.

С make-файлами разбираться досконально не приходилось (в целом они полностью расписаны в IDE как свойства проекта). Может там что не так, но если так, то виновата сборка эклипса, а я с такой проблемой не сталкивался, хотя сижу на эклипсе уже давольно давно, релиза три как минимум.

В общем, попробуй MinGW GCC (если конечно у тебя не linux) переставить в умолчальную папку или другую сборку эклипса.
PM MAIL   Вверх
andrew_121
Дата 13.12.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



SoulSeeker, 
fry, Что-то вы по бурьянам пошли smile Что-то мне подсказывает, что ошибка - unresolved external


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
fry
Дата 13.12.2009, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: нет
Всего: 3



Всмысле?
PM MAIL   Вверх
andrew_121
Дата 13.12.2009, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(fry @  13.12.2009,  23:09 Найти цитируемый пост)
Всмысле? 

В прямом. Зная гнутый компилятор, и его сообщения, я почти уверен что это именно - unresolved external ;)

Добавлено через 1 минуту и 25 секунд
Скорее всего, inc.cpp не включен в сборку.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
fry
Дата 13.12.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: нет
Всего: 3



Ну тогда, надеюсь, автор позаботился о видимости cpp файла для эклипса, ну и соответственно самого компилятора. Иаче действительно зря время потрачено.  smile 
PM MAIL   Вверх
SoulSeeker
Дата 15.12.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 21.7.2008

Репутация: нет
Всего: 2



Поставил MinGW  с нуля - теперь все видит, и проекты правильные создаются. fry, спасибо ;)
PM MAIL WWW   Вверх
andrew_121
Дата 15.12.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(SoulSeeker @  15.12.2009,  17:06 Найти цитируемый пост)
Поставил MinGW  с нуля - теперь все видит

Дело то не в этом ;) Расскажи, какая причина была на самом деле?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
SoulSeeker
Дата 15.12.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 21.7.2008

Репутация: нет
Всего: 2



Ну, во-первых, до этого я использовал mingw, который шел с Qt, и при создании не qt проектов у меня даже не появлялись настройки для debug и release и все пути к инклудам сам прописывал. Во-вторых, все файлы были подключены к проекту, никаких unresolved external не вываливалось, только Undefined reference to test(). 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0730 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.