2016-04-03 55 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