我正在测试一些C++代码.目前有一个问题我无法理解其起源.代码是这样的:
typedef struct
{
UWORD tFollowUp_uw;
union
{
UBYTE Control_ub;
struct
{
BITFIELD8 Request_b1 :1;
}b_st;
}b_un;
}X_CONTROLS;
#define Request_b (Controls_st.b_un.b_st.Request_b1)
#define tFollowUp_uw (Controls_st.tFollowUp_uw)
class Class_T20
{
public:
X_CONTROLS Controls_st;
}
Run Code Online (Sandbox Code Playgroud)
所以,当我测试这些LOC时,我首先声明一个对象Class_T20_obj.
我只能Request_b1通过调用来访问变量Class_T20_obj.Controls_st.b_un.b_st.Request_b1
我无法tFollowUp_uw通过调用访问变量Class_T20_obj.Controls_st.tFollowUp_uw
谁能帮我这个?
我无法
tFollowUp_uw通过调用访问变量Class_T20_obj.Controls_st.tFollowUp_uw
那是因为tFollowUp_uw是一个邪恶的宏,所以这被转换为
Class_T20_obj.Controls_st.(Controls_st.tFollowUp_uw)
Run Code Online (Sandbox Code Playgroud)
失败,因为Controls_st没有一个成员也被称为Controls_st; 还因为你不能把括号括在这样的成员名字周围.
Class_T20_obj.tFollowUp_uw在从中删除流氓括号之后使用宏; 或摆脱它.