2014-11-25 2 views
0

У меня есть 3 класса - GLWidget, Window и правила. Окно создает объект GLWidget с именем «m_glWidget», который я пытаюсь получить из правил класса. Я пробовал использовать «extern» и меняю вещи, но ничто, кажется, не заставляет его работать. Самое близкое, что у меня есть, - это одна ошибка, которая говорит «класс хранения, указанный для« m_glWidget », но я не уверен, что это значит. Это мой код:Объявление моего объекта как «extern» дает «класс хранения указан» ошибка

window.h

#include "glwidget.h" 
#include "rules.h" 

class GLWidget; class rules; 

class Window : public QDialog, public Ui::frmMain 
{ 
    Q_OBJECT; 

public: 

    Window(QWidget *parent = 0); 

    rules *gameRules; 
    GLWidget *m_glWidget; 

window.cpp

#include "rules.h" 
#include "glwidget.h" 

class rules; class GLWidget; 

using namespace std; 

Window::Window(QWidget *parent):QDialog(parent) 
{ 

    m_glWidget = new GLWidget; 
    gameRules = new rules; 

rules.h

#include "windows.h" 
#include "glwidget.h" 

class rules{ 

public: 

    rules(); 

    extern GLWidget *m_glWidget; 

rules.cpp

#include "window.h" 
#include "glwidget.h" 

using namespace std; 

rules::rules(){ 
} 

void rules:: print(){ 

    cout << m_glWidget->x << endl; 
} 
+1

'extern' не может быть применен к классу. –

+1

Хорошо спасибо. Любые предложения по другому пути доступа к переменной в GLWidget из правил? – hunterge

+0

Как обычно, добавьте ссылку на экземпляр окна в правилах. – user3159253

ответ

1

Как насчет этого?

#include "windows.h" 
#include "glwidget.h" 

class rules{ 

public: 
    rules(GLWidget *glWidget) 
     : m_glWidget(glWidget) 
    { 
    } 

    GLWidget *m_glWidget; 
+1

Большое спасибо. Это, похоже, решило эту проблему, однако по какой-то причине теперь ей не нравится объект «правил», который я сделал в Window, называемый «gameRules». Я получаю сообщение об ошибке: «Нет подходящей функции для вызова правил :: rules()». – hunterge

+1

@TomStock похоже, что вы определили что-то вроде 'rules myrule;', которое не дает аргументов конструктора в соответствии с тем, что вы предоставили в классе. Ваш единственный ctor требует 'GLWidget *'. Вы должны нарисовать на C++, поскольку он отличается от того, к чему вы привыкли, Ithink. –

+1

Спасибо, да, это очень отличается от того, что я тоже использую. Я попробовал 'gameRules = new (GLWidget *); 'и он возвращает ожидаемое первичное выражение ошибки перед '*' токеном. Предполагаю, что я ввел неправильный параметр? – hunterge

Смежные вопросы