2014-11-25 114 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