LINUX.ORG.RU

C++


0

0

мне надо получить доступ к public переменным одного класса, через другой класс. причём я не знаю обьекта первого класса.
простенький пример:

////////////////////////////////////////////////////////////////////////////////
///////////////////
#include <qapplication.h>
#include <qmainwindow.h>

class First : public QMainWindow
{
    public:
	static First *App;

	int config;

	First(QWidget *parent = 0):QMainWindow(parent)
	{
	    App = this;
	    config = 100;
	}
};


#define perem ((First::App)->config)


class Second
{
    public:
	Second()
	{}

	void todo()
	{
	    int getconfig = perem;
	    printf("\nWe got %d\n", getconfig);
	}
};


int main(int argc, char **argv)
{
    QApplication a(argc, argv);

    First *mw = new First;
    mw->show();
    
    a.setMainWidget(mw);

    return a.exec();
}
////////////////////////////////////////////////////////////////////////////////
///////////////////

[root@localhost class]# ./done
g++ -c -pipe -Wall -W -O2 -fomit-frame-pointer -pipe -march=i586 -mcpu=pentiumpro  -DQT_NO_DEBUG -I/usr/lib/qt3/mkspecs/default -I. -I. -I/usr/lib/qt3/include -o main.o main.cpp
g++  -o class main.o   -L/usr/lib/qt3/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm
main.o(.text+0x6b): In function `main':
: undefined reference to `First::App'
collect2: ld returned 1 exit status
make: *** [class] Ошибка 1


в krusader похожий пример прекрасно работает. Они там получают доступ ко многим public переменным.
как бороться ?
anonymous

Re: C++

Если я правильно помню, gcc требует явного определения статической переменной, поэтому надо добавить после определения класса First что-то типа:

First* First::App = 0;

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