2016-04-03 53 views
0
class BO2Offsets 
{ 
    public: 
     struct Prestige 
     { 
      u32 Offset { 0x000000 }; 
      char One { 0x01 }, 
       Two { 0x02 }, 
       Three { 0x03 }, 
       Four { 0x04 }, 
       Five { 0x05 }, 
       Six { 0x06 }, 
       Seven { 0x07 }, 
       Eight { 0x08 }, 
       Nine { 0x09 }, 
       Ten { 0x0A }, 
       MasterPrestige { 0x0B }, 
       CheatedPrestige { 0x0C }; 
     }; 
}; 
BO2Offsets BO2; 

的main.cC++ - 錯誤: 'BO3' 在此範圍內未聲明

BO2 *BO3; 

我創建一個新的元素BO2但它返回我一個錯誤:

error: 'BO3' was not declared in this scope 

我該如何解決這個問題?
編輯: 當我宣佈BO3這樣的:

BO2Offsets *BO3; 

我用BO3這樣的:

BO3->Prestige->Offset 

而且我得到一個錯誤:錯誤:無效使用的「結構BO2Offsets ::威望「|

+2

現在完成最小示例。 – gsamaras

回答

-1

BO2不是類型,只是變量名稱,而編譯器想要類型。

使用

BO2Offsets * B03; 

編輯: 在第二位 使用

BO3->Prestige.anyName.Offset; 

EDIT2;好的人,如果每個人都編輯他的內容,我也編輯: 結構不正確引入,字段不能被訪問。現在這種概念在現代GCC上編譯好了。順便說一句Prestige這樣的介紹不是太有用,就像'匿名類'(某種程度上)類似。我在更高層次上聲明struct/class。在這個片段中可以省略。
但給字段名稱(我的anyName)是訪問他的內部字段很重要。

class BO2Offsets 
    { 
     public: 
      struct Prestige 
      { 
       u32 Offset { 0x000000 }; 
       char One { 0x01 }, 
        Two { 0x02 }, 
        Three { 0x03 }, 
        Four { 0x04 }, 
        Five { 0x05 }, 
        Six { 0x06 }, 
        Seven { 0x07 }, 
        Eight { 0x08 }, 
        Nine { 0x09 }, 
        Ten { 0x0A }, 
        MasterPrestige { 0x0B }, 
        CheatedPrestige { 0x0C }; 
      } anyName; // here !!! 
    }; 
+1

你不能像這樣使用'Prestige'。這不是數據成員。並在此線程中退出投票。 – Srikanth

-1

BO3在你的情況是沒有什麼。

您首先需要投射BO3。

BO2Offsets BO3; 

BO2Offsets *BO3; 
+0

你說什麼鑄造?它沒有什麼可施展的。 –

0

你需要一個typedef那裏。你現在擁有的是一個變量聲明。

變化BO2Offsets BO2;typedef BO2Offsets BO2;


關於你的第二個問題,你不能使用Prestige一樣,因爲它不是數據成員。如果您需要訪問內部類型,則需要BO2Offsets::Prestige::Offset

+0

我編輯我的帖子 –

+0

不使用typedef,已在C++中過時 –

+0

'typedef'在C++中已經過時了嗎?什麼?我知道你不需要C風格的'typedef'作爲結構,但說它已經過時了一點。 – Srikanth