函数未在此范围内声明

时间:2013-08-08 19:54:23

标签: c++ qt

您好我有错误'saveFilm'未在此范围内声明。 这是用Qt制作的。 无法弄清楚为什么。请帮忙 这是我的代码:

#ifndef FILM_H
#define FILM_H

#include <QWidget>
#include <QString>
#include <QDate>

class Film:public QWidget{
public:
    Film(QString t,int dur,QString dir,QDate r);
    Film();
    void setTitle(QString t);
    void setDuration(int dur);
    void setDirector(QString dir);
    void setReleaseDate(QDate r);
    QString getTitle() const;
    int getDuration() const;
    QString getDirector() const;
    QDate getReleaseDate() const;


private:
    QString m_title;
    int m_duration;
    QString m_director;
    QDate m_releaseDate;

};

#endif // FILM_H

#ifndef FILMWRITER_H
#define FILMWRITER_H
#include "Film.h"
#include <QtGui>
#include <QFile>

class FilmWriter: public Film{

public:
    void saveFilm(Film& f);

};
#endif // FILMWRITER_H
#ifndef FILMINPUT_H
#define FILMINPUT_H

#include <QMainWindow>
#include "Film.h"
#include "FilmWriter.h"
#include <QLabel>
#include <QTextEdit>
#include <QPushButton>

namespace Ui {
    class FilmInput;
}

class FilmInput : public QMainWindow
{
    Q_OBJECT

public:
    explicit FilmInput(QWidget *parent = 0);
    ~FilmInput();
    void obtainFilmData(Film& f);
public slots:
    void getFilm();
private:
    Ui::FilmInput *ui;
    //widgets
    QMainWindow* window;
    QLabel* infoLabel;
    QLabel* titleLabel;
    QLabel* durationLabel;
    QLabel* directorLabel;
    QLabel* relDateLabel;
    QTextEdit* titleEdit;
    QTextEdit* durationEdit;
    QTextEdit* directorEdit;
    QTextEdit* relDateEdit;
    QPushButton* saveBtn;
    QPushButton* cancelBtn;
    Film f;
    //sets up gui and connects signals and slots
    void setUpGui();
};

#endif // FILMINPUT_H
#include "Film.h"
#include <QDate>
#include <QString>

Film::Film(QString t,int dur,QString dir,QDate r):m_title(t),m_duration(dur),m_director(dir),m_releaseDate(r){

}

Film::Film(){
}

void Film::setTitle(QString t){
    m_title = t;
}

void Film::setDuration(int dur){
    m_duration = dur;
}

void Film::setDirector(QString dir){
    m_director = dir;
}

void Film::setReleaseDate(QDate r){
    m_releaseDate = r;
}

QString Film::getTitle() const{
    return QString("%1").arg(m_title);
}

int Film::getDuration() const{
    return m_duration;
}
QString Film::getDirector() const{
    return QString("%1").arg(m_director);
}
QDate Film::getReleaseDate() const{
    return m_releaseDate;
}


#include "FilmWriter.h"
#include <QtGui>
#include <QFileDialog>
#include <QFile>
#include <QMessageBox>
#include <QObject>

void FilmWriter::saveFilm(Film& f){
    QString fileName = QFileDialog::getSaveFileName(this,("Save File"));
          if (fileName != "") {
              QFile file(fileName);
              if (!file.open(QIODevice::WriteOnly)) {
                  QMessageBox::critical(this, ("Error"),("Could not open file"));// error message
              } else {
                  QTextStream stream(&file);
                  stream << f;
                  stream.flush();
                  file.close();
              }
          }

}
#include "filminput.h"
#include "ui_filminput.h"
#include <QtGui>
#include "Film.h"
#include "FilmWriter.h"
#include <QTextEdit>
#include <QDate>
#include <QString>

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

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

void FilmInput::setUpGui(){
    //initialise widgets
    infoLabel = new QLabel("Please enter film data which will be saved to a file",this);
    titleLabel = new QLabel("Film Title",this);
    durationLabel = new QLabel("Film Duration",this);
    directorLabel = new QLabel("Film Director",this);
    relDateLabel = new QLabel("Film Release Date",this);
    titleEdit = new QTextEdit(this);
    durationEdit = new QTextEdit(this);
    directorEdit = new QTextEdit(this);
    relDateEdit = new QTextEdit(this);
    saveBtn = new QPushButton("Save Film",this);
    cancelBtn = new QPushButton("Cancel",this);
    //set layout
    QFormLayout* layout = new QFormLayout();
    layout->addWidget(infoLabel);
    layout->addWidget(titleLabel);
    layout->addWidget(titleEdit);
    layout->addWidget(durationLabel);
    layout->addWidget(durationEdit);
    layout->addWidget(directorLabel);
    layout->addWidget(directorEdit);
    layout->addWidget(relDateLabel);
    layout->addWidget(relDateEdit);
    layout->addWidget(saveBtn);
    layout->addWidget(cancelBtn);

    this->ui->widget->setLayout(layout);
    this->setWindowTitle("Film Archive");
    connect(saveBtn,SIGNAL(clicked()),this, SLOT(getFilm()));
    connect(cancelBtn,SIGNAL(clicked()),this,SLOT(close()));
}

void FilmInput::getFilm(){
    Film f1(titleEdit->toPlainText(),durationEdit->toPlainText().toInt() ,directorEdit->toPlainText(),
             QDate::fromString(relDateEdit->toPlainText(),"dd/MM/YYYY"));;
    obtainFilmData(f1);
}

void FilmInput::obtainFilmData(Film &f){
    saveFilm(f);
}

#include <QtGui/QApplication>
#include "filminput.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    FilmInput w;
    w.show();

    return a.exec();
}

错误在函数void FilmInput :: obtainFilmData(Film&amp; f)

接近结束。

2 个答案:

答案 0 :(得分:1)

saveFilm似乎是FilmWriter的成员。要使代码工作,它需要是FilmInput的成员。希望能帮助到你。从逻辑上讲,它需要一个FilmWriter对象的名称。

答案 1 :(得分:1)

我没有看到FilmInput的成员函数,名为saveFilm。 在顶部它在FilmWriter中声明,并且这两个类之间似乎没有链接。 这可以解决你的问题吗?