访问类内部的联合中的变量
Accessing a variable in a union which is inside a class
对于c++中幼稚的问题感到抱歉。对于下面的代码,有一个类,其中有一个具有两个变量的联合声明。如何使用下面代码中的类对象访问联合中的变量:
class my
{
public:
//class member functions, and oeprator overloaded functions
public:
union uif
{
unsigned int i;
float f;
};
private:
//some class specific variables.
};
如果存在类型为my的对象,如
my v1;
在函数后面
使用v1如何访问浮点数f;代码中的联合内部?
我还想在调试器(VS-2010)的监视窗口中观看此浮动f的值,如何做到这一点?
我试过v1.uif。f,在监视窗口中给出错误:错误操作符需要类结构或联合。
v1。
您只是在类的作用域中定义联合,而不是实际创建其类型的成员变量。因此,将代码更改为:
class my
{
public:
//class member functions, and oeprator (sic) overloaded functions
public:
union uif
{
unsigned int i;
float f;
} value;
private:
//some class specific variables.
};
现在可以在联合成员中设置成员变量,如下所示:
my m;
m.value.i=57;
// ...
m.value.f=123.45f;
您从未实际定义该联合的任何成员。你只定义了联盟本身。没有勺子浮动
您只定义了联合的类型,您还没有声明该联合的类型的对象。
试试这个:
class my
{
public:
union uif
{
unsigned int i;
float f;
};
uif obj; //declare an object of type uif
};
my v;
v.obj.f = 10.0; //access the union member
我在这里没有看到的一个选项是匿名联合,这是您没有类型或实例化的地方。像这样:
class my
{
public:
//class member functions, and oeprator (sic) overloaded functions
function(int new_i) { i = new_i;}
function(float new_f) { f = new_f;}
public:
union /* uif */
{
unsigned int i;
float f;
};
private:
//some class specific variables.
};
my m;
m.i=57;
m.f=123.45f;
请记住,对于联合,它只定义为从写入的最后一个成员变量中读取。
您已经在类中定义了联合,但是还没有创建它的实例!试一试:
union uif
{
unsigned int i;
float f;
} myUif;
然后使用v1.myUif.f
(或i)
相关文章:
- 内联函数中具有内部链接的全局变量
- C++ SSE 内部函数:将结果存储在变量中
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 是否可以禁止在for循环体内部修改循环变量
- 当使用lambda进行变量的复杂初始化时,如何处理从内部抛出的lambda外部异常
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 使用虚拟变量对 std::vector 内部循环进行切片的最佳方法
- 访问lambda内部循环控制变量
- 如何通过从变量中获取类型来访问内部 typedef
- 解决具有嵌套模板化变量的 Visual Studio 内部编译器错误
- 内部循环的变量
- lambda内部捕获的constexpr变量失去了其constexpr-ness
- 循环时内部的C 声明和初始化变量
- 用名称为“ this”内部括号内的变量在3个不同的编译器上导致不同的结果
- 使用动态铸件来返回派生类内部的变量的不同值
- 如何在 for 循环内部或外部打印双精度变量
- 当在函数内部使用静态变量时,输出会发生变化,该函数在c++中返回引用
- 函数内部静态变量的内存分配
- 在外部功能中具有一个变量初始化或内部功能中的多个初始化是最有效的
- 将更改此静态变量内部的函数的结果分配给静态变量