2013-06-21 10 views
1

好的,所以我嘗試了幾種方法來處理這個問題,但我似乎無法修復它。從聲明的結構訪問類數據

在我的頭文件我有:

class MyClass { 
public: 
    bool test; 

    struct MyStruct; 
}; 

我也有一個構造函數和所有的,但是這並不重要/不導致錯誤

在CPP是我想要做的是這樣的:

MyClass::MyStruct { 
    test=true; 
}; 

問題是,結構無法訪問測試變量。我如何將當前實例的變量傳遞給結構或其他方式來允許結構訪問變量。

+1

不清楚爲什麼你需要這樣做:爲什麼測試不是MyStruct的一部分?你的設計是哪一個? – Antonio

+0

@Antonio類中的bool用於各種功能,我沒有發佈完整的代碼,因爲它有很多文件依賴於它所使用的遊戲引擎。 –

回答

0

對我來說,如果MyStruct正在執行代碼,它應該是一個類。如果是的話,你要麼傳遞它MyClass的一個實例(例如,如果從MyClass調用this),或通過它參考它需要的成員(例如this->test)...

+0

由於其他函數如何使用它,它不能是一個類或者有'this'傳遞給它。在我的情況下,該結構被用作另一個函數的類型,它訪問結構的內部函數execute()我不能混淆構造函數或execute()的參數,但是我需要布爾賦值發生在execute()塊。 –

+0

如果您不能將參數更改爲execute()(例如傳遞實例或成員數據),並且MyClass對象不是全局的,那麼您就沒有正在訪問的參數(沒有「我的父對象」類的訪問)。聽起來像某種設計/體系結構的變化是爲了... – mark

+0

事實證明,這些功能有一些擴展,允許param傳遞,我設法解決這個問題。感謝您的幫助。 –

0

您可以在類定義中聲明結構爲friend

class MyClass { 
public: 
    bool test; 

    friend struct MyStruct; 
}; 

編輯:

class MyClass { 
    friend class MyStruct(MyClass *myClass) : myClass(myClass) { 
     private: 
     MyClass *myClass; 
    } 

    MyStruct *myStruct; 

    bool test; 

    public: 

    MyClass() { 
     myStruct = new MyStruct(this); 
    } 

} 

注:這是未經測試,只是寫在我的瀏覽器。我知道它缺少析構函數和東西。

由於您將父指針傳遞給成員類,因此成員類可以訪問父類的私有成員,因爲它被聲明爲friend

+0

我試過了,但它仍然說測試未定義在結構中。 –

2

此:

MyClass::MyStruct { 
    test=true; 
}; 

是不是在所有有效的C++代碼。也許你的意思是這樣的:

MyClass::Class() { 
    test=true; 
} 

這將使的MyClass默認構造函數設置testtrue。但是你的問題看起來像你想從MyClass::MyStruct設置MyClass::test的值。這是不可能的,因爲嵌套類(或者結構,在你的情況下)不是「繼承」或「包含」,或者真的與它的封閉類(或結構)有特殊的關係。

另一種可能性是:

class MyClass { 
public: 
    static bool test; 

    struct MyStruct; 
}; 

MyClass::MyStruct::MyStruct() { 
    test=true; 
} 

這將使嵌套結構,其設置在封閉類中的變量的默認構造函數,但隨後的變量需要是靜態的,這意味着只有一個有一個在整個程序,而不是每個類或結構的每個實例的單獨值。