LINUX.ORG.RU

Ошибки, ошибки...


0

0

Ребята, я в отчаянии.

Вчера прога моя работала, основную ф-ю выполняла. Одну строчку добавил - не компилируется.
Убрал ее - некомпилируется. Да двух ночи бился над ней.

Сегодня думаю - начну проект заново, буду просто поэтапно добавлять работающий код. Ели ошибка появится - знаешь где искать.
Создал проект Designer(main window + main module). Копмилируется нормально.

Вот какие изменения внес:
- Объявил классы в first_f.h (перед классом главной формы)
- Оперелил классы в модуле first_f.cpp (перед классом главной формы)
- Добавил в класс главной формы поле - указатель на класс Config (тот самый который я объявил)
- В ф-и main полю conf класса first_f присваиваю ардес объявленного там же объекта Config.

Все. При компиляции появляется такая ошибка:

g++ -o wdf .obj/main.o .obj/data.o .obj/first_f.o .obj/qmake_image_collection.o .obj/moc_first_f.o -L/usr/qt/3/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm
.obj/main.o(.text+0x82): In function `main':
: undefined reference to `Config::Config()'
.obj/main.o(.text+0xa6): In function `main':
: undefined reference to `Config::~Config()'
.obj/main.o(.text+0xd5): In function `main':
: undefined reference to `Config::~Config()'
collect2: ld returned 1 exit status
make: *** [wdf] Ошибка 1

Чудеса только начинаются. Если закомментировать поле conf класса first_f и строчку в main, где я ему присваиваю ардес, то ошибка при компиляции та же самая.
Если в пустой деструктор добавить код (с сохраненным предыдущим изменением) то ошибка исчезает. Но программа выдает Segmantation Fault.

Что значит collect2: ld...?


Учись пользовать cvs и diffutils...

vsl
()

А ты вообще читать умеешь, или где?

Конструктор и деструктор не определены, но используются.

vsl
()
Ответ на: комментарий от vsl

Конструктор и дустпуктор как раз таки и определены. В first_f.cpp:

//---------------------------------------------------
Item::Item()
{
char *device = new char[255], *point = new char[255], *caption = new char[255], *fstype = new char[255], *image = new char[255];
}
//---------------------------------------------------
Config::Config()
{
char *path = new char[255], *browser = new char [255];
strcpy(path, getenv("HOME"));
strcat(path, "/.wdf/wdf.conf");
printf("\nConfig file: %s", path);
}
//---------------------------------------------------
Item::~Item()
{
/* delete [] device;
delete [] point;
delete [] caption;
delete [] fstype;
delete [] image;*/
}
//---------------------------------------------------
Config::~Config()
{
// delete [] path;
// delete [] browser;
}
//---------------------------------------------------

Ty3uK
() автор топика

ld - это линкер, он собирает объектные файлы *.о в один исполняемый файл.

>>: undefined reference to `Config::Config()

значит, ты определил конструктор,
но не реализовал его. Вроде как

class classA
{
  public:
    classA();

    void func();

};

void classA::func()
{
   cout << "func";
}

/*
нет реализации:
classA::classA()
{
}
*/

anonymous
()
Ответ на: комментарий от Ty3uK

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

Такое ощущение что какая то программа "подменивает" файл.

Ty3uK
() автор топика
Ответ на: комментарий от Ty3uK

Меня это очень беспокоит!!!
Сейчас опять!

После успешной компиляции окно редактора с модулем first_f.cpp осталось открытым, кое что подправил в другом модуле, компилирую - ошибки.

Как файл может подмениваться?

Ty3uK
() автор топика
Ответ на: комментарий от Ty3uK

Такой эксперимент.
В папку отдельную скопировал все модули cpp, заголовочные файлы h, файл проекта pro и главной формы ui.

Посмотрел - конструкторы и деструкторы есть.

Запускаю make - ошибки. Смотрю в модуль - констр. с дестр. исчезли.
Как будто при компиляции из first_f.ui снова генерируется first_f.cpp

Ty3uK
() автор топика
Ответ на: комментарий от ukez

Посмотри в Makefile - может оно так и есть?

AIv ★★★★★
()
Ответ на: комментарий от Ty3uK

Забей на Qt Designer. Делай ручками. Поверь, так будет быстрее, чем с такими глюками разобраться.

ANDI ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.