C++, OOP, Scope

Gast #2758504
Lesenswert?

Kurze Frage zum Scope in C++:

Evtl. für Qt nicht der richtige Weg, aber ich muss aus einem Member von 
MainWindow auf eine Variable zugreifen, und zwar "scene".
Ich dachte bislang, da sie zur selben Instanz gehören, gibt es den 
direkten Zugang, aber ich bekomme den Fehler "'scene': nichtdeklarierter 
Bezeichner".
Muss ich dieses lokale Objekt (scene) in der Klassendeklaration per 
"access specifier" bekannt machen?

1
namespace Ui {
2
class MainWindow;
3
}
4

5
class MainWindow : public QMainWindow
6
{
7
    Q_OBJECT
8

9
public:
10
    explicit MainWindow(QWidget *parent = 0);
11
    virtual bool winEvent( MSG* message, long* result );
12
    ~MainWindow();
13
    
14
private:
15
    Ui::MainWindow *ui;
16
};

1
MainWindow::MainWindow(QWidget *parent) :
2
    QMainWindow(parent),
3
    ui(new Ui::MainWindow)
4
{
5
    ui->setupUi(this);
6
    QGraphicsScene* scene = new QGraphicsScene(QRect(0, 0, 640, 480));
7

8
...

1
bool MainWindow::winEvent( MSG* message, long* result)
2
{
3
...
4
scene->addItem(thepixMapItem); // 'scene': nichtdeklarierter Bezeichner
5
....
Gast #2758517
Lesenswert?

So wie ich das sehe versuchst du einfach auf eine lokal angelegte 
Instanz zuzugreifen. Die es aber garnicht in der lokalen Umgebung von 
*::winEvent gibt.

Also solltest du die Eigenschaft scene schon global für die Methoden der 
Klasse MainWindow zugänglich machen.
Gast #2758527
Lesenswert?

Ah, danke für die Bestätigung, es fehlte noch das entsprechende 
#include:
1
#include <QMainWindow>
2
#include <QGraphicsScene>
3

4
namespace Ui {
5
class MainWindow;
6
}
7

8
class MainWindow : public QMainWindow
9
{
10
    Q_OBJECT
11

12
public:
13
    explicit MainWindow(QWidget *parent = 0);
14
    virtual bool winEvent( MSG* message, long* result );
15
    ~MainWindow();
16
    
17
private:
18
    Ui::MainWindow *ui;
19
    QGraphicsScene* scene;
20

21
};

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren