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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: *РЕШЕНО* undefined reference  (Прочитано 5009 раз)
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« : Сентябрь 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()
{

}

Правильно ли это будет?
« Последнее редактирование: Сентябрь 22, 2015, 09:03 от gasan_333 » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Сентябрь 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 ...;
}
Записан
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« Ответ #2 : Сентябрь 20, 2015, 21:48 »

Не совсем понял, можете подробнее
Код:
return ... trololo ...;
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Сентябрь 20, 2015, 22:09 »

Не совсем понял, можете подробнее
Код:
return ... trololo ...;

Как не трудно догадаться из названия метода, он должен создавать и возвращать объект QPushButton с заданным текстом на кнопке.
Записан
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« Ответ #4 : Сентябрь 20, 2015, 22:27 »

А как это сделать? помогите новичку ?
Записан
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« Ответ #5 : Сентябрь 20, 2015, 23:15 »

кроме этого ничего в голову не лезет
Код:
    QPushButton* createButton(const QString& str){
        QPushButton* button = new QPushButton(str);
        return button;
    }
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Сентябрь 21, 2015, 11:09 »

Как-то так

Код:
    QPushButton* calculator::createButton(const QString& str){
        QPushButton* button = new QPushButton(str);
        return button;
    }


И начини учить сперва C++, а Qt пока отложи на полгода.
Записан
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« Ответ #7 : Сентябрь 21, 2015, 21:11 »

Все решил проблему. Спасибо за помощь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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