我开始使用代码(显然不是我写的),我看到他们创建了一个对我来说有意义的类对象dataflash,但之后他们使用了:
DataFlash::ID id;
这显然是因为他们需要该结构的对象,但是他们回到DataFlash类的事实让我感到烦恼,不知道为什么,但我想"不,不,你应该使用我们的对象刚刚制作"并迅速将其更改为我在下面的内容,这会产生以下错误:
error: invalid use of ‘struct main()::DataFlash::ID’
嗯,这不公平,我基本上对我的眼睛做同样的事情,为什么这个无效使用?一旦它们在一个对象中,结构体(以及我假设的嵌套类)也没用吗?
#include <iostream>
using namespace std;
int main()
{
class DataFlash
{
public:
struct ID
{
uint8_t manufacturer; /**< Manufacturer id **/
uint8_t device[2]; /**< Device id **/
uint8_t extendedInfoLength; /**< Extended device information**/
};
};
DataFlash dataflash;
dataflash.ID id;
return 0;
}
答案 0 :(得分:1)
代码定义了几层嵌套作用域,原始代码使用作用域解析运算符::
进行作用域解析
您的示例使用成员访问运算符.
,并且结构ID不是成员,它存在于您的类型范围内,类型和值不是一回事。
作为脚注,由于enum的范围规则,可以通过两种方式访问枚举。
#include <iostream>
struct object {
enum identifier {
a = 2,
b = 16,
};
identifier id;
};
int main(int argc, char* argv[]) {
object obj;
std::cout << object::a << std::endl;
std::cout << obj.b << std::endl;
}