LINUX.ORG.RU

undefined reference


0

0

Собственно ощибка undefined reference при компиляции простенького qt4 проекта (пишу в kdevelop)

cd '/home/yk/Projects/ssau/zelenko/TypeTrain' && make -k
cd src && /usr/bin/qmake-qt4 src.pro -unix -o Makefile
cd src && make -f Makefile
/usr/bin/uic-qt4 logindialog.ui -o ui_logindialog.h
/usr/bin/uic-qt4 userwindow.ui -o ui_userwindow.h
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o main.o main.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o typetrain.o typetrain.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o userwindow.o userwindow.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o logindialog.o logindialog.cpp
/usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. logindialog.h -o moc_logindialog.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o moc_logindialog.o moc_logindialog.cpp
/usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. userwindow.h -o moc_userwindow.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o moc_userwindow.o moc_userwindow.cpp
g++ -o src main.o typetrain.o userwindow.o logindialog.o moc_logindialog.o moc_userwindow.o -L/usr/lib -lQtGui -lQtCore -lpthread
typetrain.o: In function `classUser::Instance()':
typetrain.cpp:(.text+0x49): undefined reference to `classUser::_self'
typetrain.cpp:(.text+0x52): undefined reference to `classUser::_self'
typetrain.cpp:(.text+0x78): undefined reference to `classUser::_self'
typetrain.cpp:(.text+0x7d): undefined reference to `classUser::_self'
collect2: ld returned 1 exit status
make[1]: *** [src] Ошибка 1
make[1]: Цель `first' не была пересобрана из-за ошибок.
make: *** [sub-src-make_default] Ошибка 2
make: Цель `first' не была пересобрана из-за ошибок.
*** Завершено с кодом: 2 ***

classUser::_self - ссылка на объект
//typetrain.h вырезка, кутэшных объектов здесь нет
#ifndef TYPETRAIN_H
#define TYPETRAIN_H

class classUser
{
public:
static classUser* _self;
static classUser* Instance();
classUser();
};
#endif
//typetrain.cpp
#include "typetrain.h"

classUser* classUser::Instance()
{
if(!_self) _self = new classUser();
return _self;
}
погуглив, заметил, что проблема распространенная, но решения что-то не нашел =(

Ответ на: комментарий от tri10bit

статический член класса это не определение (definition), а объявление (declaration), которое должно быть инициализировано (и соотв. определено) позже.

>>погуглив, заметил, что проблема распространенная, но решения что-то не нашел

да, книжки и стандарт мало кто читает :)

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