C++, OOP, Scope

Gast #2758504
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
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.
Gast
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.