Russian Qt Forum
Сентябрь 30, 2024, 22:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: undefined reference(((  (Прочитано 12496 раз)
voipp
Гость
« : Ноябрь 03, 2009, 19:20 »

Имееются класс MainWindow и библиотека matrix.QT во всех строчках конструктора MainWindow где исопльзуется библиотека matrix находит ошибку undefined reference.
Так же он умудрился найти ошибки и в коде саомй библиотеке!(Х)_(Х)
а в самом конце вес это добавляет ошибкой collect2 выполнение  id завершилось с кодом возврата 1.Что за collect2, что он коллекционирует!
mainwindow.cpp
Код:

#include "mainwindow.h"
#include <MATRIX/matrix.h>


MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
prevPoint.setSize(4);
center.setSize(4);
currPoint.setSize(4);
m.mObject[0][0]=50;
m.mObject[0][1]=50;
m.mObject[1][0]=100;
m.mObject[1][1]=50;
m.mObject[2][0]=100;
m.mObject[2][1]=10;
m.mObject[3][0]=50;
m.mObject[3][1]=10;
m.mObject[0][3]=1;
m.mObject[1][3]=1;
m.mObject[2][3]=1;
m.mObject[3][3]=1;
center[0]=75;
center[1]=30;
center[2]=0;
center[3]=1;
m.Init_mchangecoord(400);
QPointF point(1,1);
currPoint=m.Change_coord(point);

}
//...........
mainwindow.h
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <MATRIX/matrix.h>
#include <QtGui>

class MainWindow : public QWidget
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    Main_matrix_class m;
    CVector center;
    CVector prevPoint, currPoint;
    void paintEvent(QPaintEvent*);
    void mousePressEvent(QMouseEvent* mouse);
    void mouseReleaseEvent(QMouseEvent* mouse);
    void mouseMoveEvent(QMouseEvent* mouse);

};

#endif // MAINWINDOW_H
matrix.h
Код:
// Библиотека matrix очень большая - вот ее фрагмент
//..
class CRow {
  protected:
    unsigned size;    // кол-во элементов
    tableitem *items; // массив элементов
  public:
  // конструктор по умолчанию
    CRow();
  // конструктор копирования
    CRow(const CRow& r);
  // конструктор с заданным размером
    CRow(unsigned uSize);
  // деструктор
    ~CRow();
  // обнуление всех элементов
    void zero_items();
  // кол-во элементов
    unsigned getSize() const { return size; }
  // изменение размера столбца, старые значения сохр, новые = 0
    CRow& setSize(unsigned uSize);
  // оператор [], индекс от нуля
    tableitem& operator [](unsigned uIndex);
    const tableitem& operator [](unsigned uIndex) const;
  // оператор вывода
   //friend ostream& operator << (ostream& s, CRow& r);
  // оператор ввода
   //friend istream& operator >> (istream& s, CRow& r);
  // оператор присваивания
    CRow& operator = (const CRow& r);[move]<---И здесь компилятор находит ошибку undefined reference[/move]
  };
/...
matrix.cpp
Код:
//.....
CRow& CRow::operator = (const CRow& r) {
  setSize(r.size);
  for (unsigned x = 0; x < size; x++)
    items[x] = r.items[x];
  return *this;
};
//....
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Ноябрь 03, 2009, 19:48 »

библитека не прилинкована к основной программе, отсюда и undefined reference. Выложи код библиотеки Matrix, сначала надо разобраться с ней, потом с основной программой.
« Последнее редактирование: Ноябрь 03, 2009, 19:54 от Alex Custov » Записан
voipp
Гость
« Ответ #2 : Ноябрь 03, 2009, 20:05 »

слишком уж она большая - http ://ifolder.ru/14822575
PS я работаю на Linux Mint 7
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Ноябрь 03, 2009, 21:05 »

ошибки:
1) iostream.h - устарело, STL загловки подключай без расширения ".h"
2) имена STL классов использются без указания видимости "std::", и "using namespace std;" тоже нигде нет

предупреждения:
3) строки 80, 290 в matrix.cpp:
Код:
s.right
- пустое выражение, видимо подразумевалось что-то другое
4) строка 585 в matrix.cpp: - пустое тело в if(), видимо подразумевалось что-то другое
 
После правок библиотека откомпилировалась стандартно:

Код
Bash
$ qmake -project
$ правим "TEMPLATE=lib" в .pro
$ qmake
$ make
 

P.S. Debian Lenny, g++ 4.3.2, Qt 4.5.2
Записан
voipp
Гость
« Ответ #4 : Ноябрь 03, 2009, 21:51 »

я ее в проект не добавлял а надо?Может из-за этого библиотека не скомпилилась и компоновщик не нашел ее объектный файл?Я просто не знаю как создавать такого рода вещи.
« Последнее редактирование: Ноябрь 03, 2009, 22:03 от voipp » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Ноябрь 03, 2009, 22:54 »

естественно надо. Или вкомпиливать прямо в основной проект (поменять .pro файл!), или компилить matrix как отдельный проект и подключать в основной через LIBS += и INCLUDEPATH +=. Самое быстрое решение - первое.
« Последнее редактирование: Ноябрь 03, 2009, 22:56 от Alex Custov » Записан
voipp
Гость
« Ответ #6 : Ноябрь 04, 2009, 15:46 »

а как поменять тогда .pro file не подскажите?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Ноябрь 04, 2009, 15:49 »

а как поменять тогда .pro file не подскажите?

В SOURCES добавить matrix.cpp, в HEADERS - matrix.h.
Записан
voipp
Гость
« Ответ #8 : Ноябрь 04, 2009, 17:54 »

Exited with code 2.
Error while building project Event_with_mouse
When executing build step 'Make'
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #9 : Ноябрь 04, 2009, 18:28 »

Exited with code 2.
Error while building project Event_with_mouse
When executing build step 'Make'

Полный лог ошибок дай, в конце-то концов...
Записан
voipp
Гость
« Ответ #10 : Ноябрь 04, 2009, 18:59 »

извиняюсь что не догадался сразу(
Код:
Running build steps for project Event_with_mouse...
Configuration unchanged, skipping QMake step.
Starting: /usr/bin/make -w
make: Вход в каталог `/home/voipp/QTPROGRAMMS/Event_with_mouse'
make: *** Нет правила для сборки цели `matrix.cpp', требуемой для `matrix.o'. Останов.
make: Выход из каталога `/home/voipp/QTPROGRAMMS/Event_with_mouse'
Exited with code 2.
Error while building project Event_with_mouse
When executing build step 'Make'
Записан
voipp
Гость
« Ответ #11 : Ноябрь 04, 2009, 19:05 »

вот какой .pro file -
Код:
TARGET = Event_with_mouse
TEMPLATE = app
SOURCES += main.cpp \
    mainwindow.cpp
SOURCES += matrix.cpp

HEADERS += mainwindow.h
HEADERS += matrix.h
а вот makefile(неполностью) -
Код:
ЗЫ библиотека находится по адресу /home/voipp/qtsdk(каккие-то номера)/qt/include/MATRIX
main.o: main.cpp mainwindow.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp

mainwindow.o: mainwindow.cpp mainwindow.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp

matrix.o: matrix.cpp matrix.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o matrix.o matrix.cpp

moc_mainwindow.o: moc_mainwindow.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp
« Последнее редактирование: Ноябрь 04, 2009, 19:07 от voipp » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #12 : Ноябрь 04, 2009, 19:07 »

вот какой .pro file -

такое иногда случается, полностью пересобери проект- "rm -f Makefile && qmake && make clean && make"
Записан
voipp
Гость
« Ответ #13 : Ноябрь 04, 2009, 19:15 »

Код:
WARNING: Failure to find: matrix.cpp
WARNING: Failure to find: matrix.h
rm -f moc_mainwindow.cpp
rm -f main.o mainwindow.o matrix.o moc_mainwindow.o
rm -f *~ core *.core
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o main.o main.cpp
In file included from main.cpp:2:
mainwindow.h:3:27: error: MATRIX/matrix.h: No such file or directory
In file included from main.cpp:2:
mainwindow.h:13: ошибка: ‘Main_matrix_class’ не является именем типа
mainwindow.h:14: ошибка: ‘CVector’ не является именем типа
mainwindow.h:15: ошибка: ‘CVector’ не является именем типа
make: *** [main.o] Ошибка 1
И еще вот что - matrix.cpp может нужно хранить не в папке matrix а в /usr/src ?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #14 : Ноябрь 04, 2009, 19:19 »

Код:
WARNING: Failure to find: matrix.cpp
WARNING: Failure to find: matrix.h
И еще вот что - matrix.cpp может нужно хранить не в папке matrix а в /usr/src ?

Эти файлы нужно хранить в каталоге с проектом, а их там нет, о чём qmake и сказал.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.103 секунд. Запросов: 23.