Название: *РЕШЕНО* undefined reference
Отправлено: sektor от Сентябрь 20, 2015, 20:51
Добрый вечер всем. Начал изучать Qt с книжкой Qt 5.3 Макс Шлее. Остановился на калькуляторе листинг 6.6 - 6.11. Ошибка при компиляции. Не могу создать PushButton для Widget если я правильно выражаюсь. calculator.h #ifndef CALCULATOR_H #define CALCULATOR_H
#pragma once
#include <QWidget> #include <QStack>
class QLCDNumber; class QPushButton;
class calculator : public QWidget { Q_OBJECT
private: QLCDNumber* m_plcd; QStack<QString> m_stk; QString m_strDisplay;
public: calculator(QWidget *parent = 0); ~calculator(); QPushButton* createButton(const QString& str); void calculate ( );
/*signals: public slots: void slotButtonClicked();*/ };
#endif // CALCULATOR_H
calculator.cpp #include "calculator.h" #include <QLCDNumber> #include <QGridLayout> #include <QPushButton> #include <QDebug>
calculator::calculator(QWidget *parent) : QWidget(parent) {
m_plcd = new QLCDNumber(12); m_plcd->setSegmentStyle(QLCDNumber::Flat); m_plcd->setMinimumSize(150, 50);
QChar aButtons [4] [4] = {{'7', '8', '9', '/'}, {'4', '5', '6', '*'}, {'1', '2', '3', '-'}, {'0', '.', '=', '+'} }; QGridLayout* ptopLayout = new QGridLayout; ptopLayout->addWidget(m_plcd, 0, 0, 1, 4);
ptopLayout->addWidget(createButton("CE"), 1, 3);
for (int i=0; i<4; ++i){ for(int j=0; j<4; ++j){ ptopLayout->addWidget(createButton(aButtons[i][j]), i+2, j); } } setLayout(ptopLayout); }
calculator::~calculator() {
}
main.cpp #include "calculator.h" #include <QApplication>
int main(int argc, char *argv[]) { QApplication a(argc, argv); calculator Calculator;
Calculator.setWindowTitle("Calculator"); Calculator.resize(230,200);
Calculator.show();
return a.exec(); }
при компиляции выдает ошибку undefined reference to `calculator::createButton(QString const&)' если вместо createButton применить new QPushButton все работает. calculator.cpp #include "calculator.h" #include <QLCDNumber> #include <QGridLayout> #include <QPushButton> #include <QDebug>
calculator::calculator(QWidget *parent) : QWidget(parent) { m_plcd = new QLCDNumber(12); m_plcd->setSegmentStyle(QLCDNumber::Flat); m_plcd->setMinimumSize(150, 50);
QChar aButtons [4] [4] = {{'7', '8', '9', '/'}, {'4', '5', '6', '*'}, {'1', '2', '3', '-'}, {'0', '.', '=', '+'} };
QGridLayout* ptopLayout = new QGridLayout; ptopLayout->addWidget(m_plcd, 0, 0, 1, 4);
ptopLayout->addWidget( new QPushButton("CE"), 1, 3);
for (int i=0; i<4; ++i){ for(int j=0; j<4; ++j){ ptopLayout->addWidget(new QPushButton(aButtons[i][j]), i+2, j); } } setLayout(ptopLayout); }
calculator::~calculator() {
} Правильно ли это будет?
Название: Re: undefined reference
Отправлено: Alex Custov от Сентябрь 20, 2015, 21:36
В классе объявлен метод QPushButton* createButton(const QString& str), он используется в ptopLayout->addWidget(createButton(aButtons[j]), i+2, j), но реализации самого метода нигде нет. C++ (Qt) QPushButton* calculator::createButton(const QString& str) { return ... trololo ...; }
Название: Re: undefined reference
Отправлено: sektor от Сентябрь 20, 2015, 21:48
Не совсем понял, можете подробнее
Название: Re: undefined reference
Отправлено: Alex Custov от Сентябрь 20, 2015, 22:09
Не совсем понял, можете подробнее Как не трудно догадаться из названия метода, он должен создавать и возвращать объект QPushButton с заданным текстом на кнопке.
Название: Re: undefined reference
Отправлено: sektor от Сентябрь 20, 2015, 22:27
А как это сделать? помогите новичку ?
Название: Re: undefined reference
Отправлено: sektor от Сентябрь 20, 2015, 23:15
кроме этого ничего в голову не лезет QPushButton* createButton(const QString& str){ QPushButton* button = new QPushButton(str); return button; }
Название: Re: undefined reference
Отправлено: Alex Custov от Сентябрь 21, 2015, 11:09
Как-то так QPushButton* calculator::createButton(const QString& str){ QPushButton* button = new QPushButton(str); return button; } И начини учить сперва C++, а Qt пока отложи на полгода.
Название: Re: undefined reference
Отправлено: sektor от Сентябрь 21, 2015, 21:11
Все решил проблему. Спасибо за помощь.
|