我对typedef struct
类和函数的构造有奇怪的行为。不同之处在于,在第一种情况下,所有定义都是在类定义期间执行的。另一种情况——在函数定义期间。看我的代码。
class C
{
public:
//struct xStruct;
typedef struct xStruct* xPtr;
typedef struct xStruct {xPtr F;} xStructR;
typedef struct { xPtr First; } xPtr_Type;
void F(void **Var)
{
xPtr Ptr = 0;
((xPtr_Type*)Var)->First = Ptr->F; //errors
}
};
void Fu()
{
typedef struct qxStruct* qxPtr;
typedef struct qxStruct {qxPtr qF;} qxStructR;
typedef struct { qxPtr qFirst; } qxPtr_Type;
qxPtr qPtr = 0;
void **qVar = 0;
((qxPtr_Type*)qVar)->qFirst = qPtr->qF;
}
在使用 MS 编译器(cl.exe)编译期间,我有两个错误:
error C2027: use of undefined type 'xStruct'
error C2227: left of '->F' must point to class/struct/union
如果我取消注释struct xStruct
声明我的代码有效。但我不明白为什么类似的代码在Fu
没有struct xStruct
声明的情况下可以正常工作?似乎编译器在类定义期间有更严格的代码分析算法......