Ich versuche, ein Objekt namens x aus einer Klasse "Fan" innerhalb der Hauptfenster-Datei QT GUI, wo ich es global sein möchte. Ich möchte, dass QTs Button-Slot-Funktionen Operationen auf dem Objekt ausführen können. Es tritt jedoch immer ein Compilerfehler "Fehler: C4430: fehlender Typspezifizierer - Int angenommen" auf. Hier ist die Header-Datei:Erstellen eines globalen Objekts in QT GUI
#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 slots:
void on_btOn_clicked();
void on_btOff_clicked();
private:
Ui::MainWindow *ui;
Fan x; // This doesn't work
Fan * x; // This doesn't either
int x; // This does work
};
#endif // MAINWINDOW_H
Und hier ist die CPP-Datei:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "fan.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_btOn_clicked()
{
ui->lblState->setText("Fan is on");
}
void MainWindow::on_btOff_clicked()
{
x.turnOff(); // This does not work of course
x->turnOff(); // Or this
ui->lblState->setText("Fan is off");
}
Ich sagte bereits der CPP-Datei die Fan-Klasse von der fan.h Datei aufzunehmen. Wenn ich das Objekt innerhalb des Fensterkonstruktors erstelle, initialisiert es fein, ist aber nicht global. Außerdem gibt es keine zirkuläre Aufnahme von Header-Dateien. Fan-Klasse enthält kein Hauptfenster.
Vielleicht weiß ich nicht, wie ich danach suchen soll, aber ich habe bereits vergeblich nachgeforscht. Jede Hilfe wird geschätzt.
Edit: Hier ist die fan.cpp Datei
#include "fan.h"
Fan::Fan(){
speed = 0;
isOn = false;
}
void Fan::setSpeed(int s){
speed = s;
}
int Fan::getSpeed(){
return speed;
}
void Fan::turnOn(){
isOn = true;
speed = 1;
}
void Fan::turnOff(){
isOn = false;
speed = 0;
}
bool Fan::getState(){
return isOn;
}
Und die fan.h Datei:
#ifndef FAN_H
#define FAN_H
class Fan
{
private:
int speed;
bool isOn;
public:
Fan();
void setSpeed(int);
void turnOn();
void turnOff();
int getSpeed();
bool getState();
};
#endif // FAN_H
Sie haben auch 'fan.h' im' mainwindow.h' weil 'Fan' Klasse in der beteiligt sich 'MainWindow' Klasse Deklaration. – vahancho
Danke. Ich habe das gerade probiert, aber jetzt bekomme ich einen Fehler "nicht gelöstes externes Symbol" von den Funktionen on_btOn_clicked() und on_btOff_clicked() speziell in den Zeilen x.turnOn() und x.turnOff(). Warum ist das? –
@AllanVindel, das anzeigt, dass Sie Ihre 'Fan' Klasse (.cpp) nicht kompiliert haben, oder' Fan :: turnOn() 'Funktion hat keine Definition. – vahancho