cpp QT undefined reference

Odpowiedz Nowy wątek
2017-05-30 19:38

Rejestracja: 4 lata temu

Ostatnio: 6 dni temu

0

Cześć :) cóż tu dużo pisać, przy próbie odpalenia niezbyt skomplikowanego programu QT pluje trzema poniższymi errorami z którymi nie mogłem sobie poradzić. Szczerze mówiąc nie jestem nawet pewien czy w odpowiednim miejscu w pliku nagłówkowym dodałem te 3 funkcje ale próbowałem różnych rzeczy i cały czas to samo :(. Z góry dziękuję każdemu za potencjalne rozwiązania :)
\mainwindow.cpp:23: błąd: undefined reference to `MainWindow::roundUp(float)'

\mainwindow.cpp:27: błąd: undefined reference to `MainWindow::roundDown(float)'

\mainwindow.cpp:30: błąd: undefined reference to `MainWindow::roundStandard(float)'

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;

}

void MainWindow::on_pushButton_clicked()
{
    QString liczba=ui->lineEdit->text();
    float liczbaF =liczba.toFloat();
    int wynik;
    if(ui->radioDown->isChecked()) {
        wynik = MainWindow::roundUp(liczbaF);
        ui->label->setText(QString::number(wynik));
    } else{
    if(ui->radioUp->isChecked()) {
       wynik = MainWindow::roundDown(liczbaF);
       ui->label->setText(QString::number(wynik));
    } else {
        wynik = MainWindow::roundStandard(liczbaF);
        ui->label->setText(QString::number(wynik));
    }
    }
}

int roundUp(float liczba){
    QString liczbastr = QString::number(liczba);
    int wynik = liczba;
    for(int i=0; i<liczbastr.length();i++){
        if(liczbastr.at(i)=="."){
           wynik+=1;
        }
    }
return wynik;
}

int roundDown(float liczba){
    int wynik = liczba;
    return wynik;
}

int roundStandard(float liczba){
return liczba+1;
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    int roundUp(float liczba);
    int roundDown(float liczba);
    int roundStandard(float liczba);

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

Pozostało 580 znaków

2017-05-30 19:51

Rejestracja: 4 lata temu

Ostatnio: 5 miesięcy temu

Musisz dodać MainWindow:: przed nazwami metod w ich deklaracji w pliku mainwindow.cpp i usunąć w ich wywołaniach, np tutaj: MainWindow::roundUp(liczbaF); :)

edytowany 4x, ostatnio: dub.raf, 2017-05-30 19:59

Pozostało 580 znaków

2017-05-30 20:03

Rejestracja: 4 lata temu

Ostatnio: 6 dni temu

0
dub.raf napisał(a):

Musisz dodać MainWindow:: przed nazwami metod w ich definicji w pliku mainwindow.cpp i usunąć w ich wywołaniach, np tutaj: MainWindow::roundUp(liczbaF); :)

Dziękuję, jak zwykle okazała się to pierdoła :D właściwie program działa nawet bez jak i z "MainWindow::" przy wywoływaniu metod. I Teraz właściwie nie bardzo rozumiem czy to nie szczególnie przy wywołaniu powinny być zasięgi podane żeby było wiadomo że to metoda klasy x a nie y w przypadku gdyby obie klasy miały metody tej samej nazwy?

A nie dobra już ogarnąłem, pomińcie ten wywód o tych zasięgach :D chyba muszę odetchnąć świeżym powietrzem :D

edytowany 1x, ostatnio: Foka, 2017-05-30 20:19

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0