2014-11-25 117 views
0

我有3个类 - GLWidget,窗口和规则。 Window创建一个名为'm_glWidget'的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'不能应用于班级成员。 – 2014-11-25 10:52:42

+1

好的,谢谢。任何建议在另一种方式从规则访问GLWidget中的变量? – hunterge 2014-11-25 10:55:26

+0

通常,在规则中添加对Window实例的引用。 – user3159253 2014-11-25 11:00:45

回答

1

这个怎么样?

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

class rules{ 

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

    GLWidget *m_glWidget; 
+1

非常感谢。这似乎解决了这个问题,但是由于某种原因,它现在不喜欢我在Window中制作的'规则'的对象,叫做'gameRules'。我得到错误,“调用规则::规则()没有匹配的函数”。 – hunterge 2014-11-25 11:29:38

+1

@TomStock它听起来像你定义了一些像'规则myrule;'这没有给出构造函数参数来匹配你在类中提供的东西。你唯一的ctor需要一个'GLWidget *',你应该刷新C++,因为它与你以前使用的不同,Ithink。 – 2014-11-25 11:41:59

+1

谢谢,是的,这与我使用的非常不同,我尝试过'gameRules = new规则(GLWidget *);'并且在'*'token'之前返回错误'expected primary-expression。我假设我输入了错误的参数? – hunterge 2014-11-25 11:45:33