własna metoda

0

Siema, dziś próbuję poznać jakieś podstawy Qt, mam taki problem:
w pliku mainwindow.cpp:

void MainWindow::on_pushButton_clicked()
{
    QString uczen = "Ktos Tam";
    double wiek = 17.4;
    QMessageBox msgBox;
    msgBox.setText(uczen+", wiek: " + zamiana(wiek));
    msgBox.exec();
}

oraz na końcu pliku spróbowałem zrobić coś takiego:

QString zamiana(double wiek){
    return QString::number(wiek);
}

błąd: 'Zamiana' is was not declared in this scope.

Jakieś wskazówki dla początkującego? z góry dzięki

0

Pokaż Bracie cały kod,bo sama definicja jest OK.Ponadto,co chciałeś uzyskać?Może ta zamiana ma być funkcją składową Twojej klasy MainWindow?

0
QString zamiana(double wiek){
    return QString::number(wiek);
}

skoro jest to metoda jakiejś klasy, to ta definicja nie jest poprawna. Brakuje nazwy klasy wraz o operatorem "::"
czyli najprawdopodobniej powinno być w twoim wypadku tak:

QString MainWindow::zamiana(double wiek){
    return QString::number(wiek);
}
0

No właśnie Bracie matek pierun wie,czy to ma być metoda klasy,czy funkcja globalna,dlatego poprosiłem autora o cały kod.Jeśli globalna to zapis jest ok a coś nie tak przy wywołaniu,jeśli metoda to trza ją zdefiniować tak jak piszesz.Ale nie ma co gdybać,niech Markness wyjaśni co ma na myśli

btw:
QMessageBoxów najwygodniej używać poprzez statyczne funkcje about,information itd.

0

z góry panowie przepraszam za niedokładne opisanie problemu, chodzi mi żeby ta zamiana była tylko wewnątrz tej klasy.

QString MainWindow::zamiana(double wiek){
    return QString::number(wiek);
}

wywala:

no 'QString MainWindow::zamiana(double)' member function declared in class 'MainWindow'

cały kod:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui/QApplication>
#include <QMessageBox>

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

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QString uczen = "Marek Mleczko";
    double wiek = 17.4;
    QMessageBox msgBox;
    msgBox.setText(uczen+", wiek: " + zamiana(wiek));
    msgBox.exec();
}

QString MainWindow::zamiana(double wiek){
    return QString::number(wiek);
}
 
0

pokaż deklarację klasy bo zapewne tam masz jakiś błąd.

0

No to zapis taki jak pokazuje matek "QString MainWindow::zamiana(double wiek)" itd.Komunikat błędu sugeruje,że zapomniałeś napisać deklaracji tej funkcji w pliku mainwindow.h-pokaż go nam też.

0
 #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();

private:
    Ui::MainWindow *ui;

private slots:
    void on_pushButton_clicked();
};

#endif // MAINWINDOW_H

W którym miejscu należy dodawać deklaracje? ;)

0

czyli mamy zaległości w podstawach ;) Na pewno musisz to dodać wewnątrz klasy, a w jakim "bloku"? To zależy czy chcesz aby metodę można było wywołać przy pomocy obiektu (była ona widoczna również poza samą klasą) - pod public: , czy tylko wewnątrz klasy - po private: lub protected: (jeśli ma być dziedziczona) :)

0

Dziękuje bardzo za pomoc! Na pewno się jeszcze do was zgłosze, dzięki ;)

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