Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C++] Problema con funzione

    salve a tutti.
    ho un piccolo problemino con una funzione:
    codice:
    // 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();
    
    private:
        Ui::MainWindow *ui;
    
    public slots:
        int closeProgram();
    };
    
    #endif // MAINWINDOW_H
    codice:
    // mainwindow.cpp
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        connect(ui->actionExit, SIGNAL(triggered()), this, SLOT(closeProgram()));
    }
    
    MainWindow::closeProgram() // ERRORE
    {
        exit(0);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    nel file cpp dove ho indicato mi da questo errore:
    codice:
    error: ISO C++ forbids declaration of ‘closeProgram’ with no type [-fpermissive]
    mi sono riletto i capito su classi e funzioni e mi sono riguardato l'esempio da cui ho cominciato e nn ho capito dov'è l'errore.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Manca il tipo di ritorno della funzione.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    scusa l'ignoranza ma dove di preciso?
    ho modificato così perchè ho visto che in verità exit() è una funzione void
    codice:
    // .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();
    
    private:
        Ui::MainWindow *ui;
    
    private slots:
        void closeProgram();
    };
    
    #endif // MAINWINDOW_H
    codice:
    // .cpp
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        connect(ui->actionExit, SIGNAL(triggered()), this, SLOT(closeProgram()));
    }
    
    MainWindow::closeProgram()
    {
        exit(o);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    adesso mi da ben tre errori:
    codice:
    error: ISO C++ forbids declaration of ‘closeProgram’ with no type [-fpermissive]
    error: prototype for ‘int MainWindow::closeProgram()’ does not match any in class ‘MainWindow’
    error: candidate is: void MainWindow::closeProgram()
    eppure nn mi sembra di sbagliare.
    nell'intestazione il tipo di ritorno c'è.

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Solo il costruttore ammette un tipo di ritorno non specificato (perchè è ovvio che il tipo di ritorno sarà dell' adt definito dalla classe).
    E tra l' altro non so se sia permesso il carattere tilde come inizio nome.

    Oltre a rispondere vorrei fare una domanda:
    codice:
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    // ecc...
    #endif
    Perchè questo ? Tu alla fine se non mettevi il tutto in una define ti bastava includere mainwindow.h e avevi quelle definizioni.Allora la domanda è: facendo così, cosa cambia?

  5. #5
    allora.
    che vuol dire Solo il costruttore ammette un tipo di ritorno non specificato?
    io lo specifico il tipo di ritorno, ed è void.
    e da quanto ne so anche c++ le funzioni possono nn avere un valore di ritorno come in altri linguaggi tipo java o c#.

    per quanto riguarda l'altra domanda.
    è Qt creator che ha messo tutta quella roba, ma sinceramente l'avrei fatto anche io visto che il libro gli dedica un paragrafo intero e fa tutti esempi così.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Mi sembrava evidente ...

    codice:
    void MainWindow::closeProgram()
    {
        exit(o);
    }
    e attenzione che hai scritto (o) la lettera o e non zero 0
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da ramy89
    E tra l' altro non so se sia permesso il carattere tilde come inizio nome.
    Quello è il "distruttore" ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da fermat
    io lo specifico il tipo di ritorno, ed è void.
    codice:
    MainWindow::closeProgram()
    Non mi sembra.

    Quello che intendevo dire (void è un valore di ritorno) è che puoi dichiarare:
    codice:
    MainWindow::MainWindow
    E non stai specificando il tipo del costruttore che è implicito e ovvio.
    Già che me l' ha ricordato oregon è valido anche per il distruttore.

  9. #9
    adesso ho capito:
    codice:
    void MainWindow::closeProgram()
    {
        exit(0);
    }
    EDIT: risposto insieme.
    mi mancava quello.
    grazie!!

  10. #10
    Originariamente inviato da ramy89
    Oltre a rispondere vorrei fare una domanda:
    codice:
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    // ecc...
    #endif
    Perchè questo ? Tu alla fine se non mettevi il tutto in una define ti bastava includere mainwindow.h e avevi quelle definizioni.Allora la domanda è: facendo così, cosa cambia?
    è l'ifndef trick (include guard) per evitare inclusioni ricorsive all'interno della stessa unità di compilazione:
    http://it.wikipedia.org/wiki/Include_guard

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.