Forum: Compiler & IDEs C++, OOP, Scope


von Schneck (Gast)


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
....

von Peter II (Gast)


Lesenswert?

du musst das Object ja wenigsten innerhalbt der Klasse als Member 
anlegen, du hast es nur innerhalbt der methode MainWindow angelegt. 
Damit ist es wieder weg nach dem die Mehtode zu ende ist.

von Legobaustein (Gast)


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.

von Schneck (Gast)


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
};

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.