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) でのコンパイル中に、次の 2 つのエラーが発生しました。
error C2027: use of undefined type 'xStruct'
error C2227: left of '->F' must point to class/struct/union
struct xStruct
宣言のコメントを外すと、コードが機能します。しかし、宣言Fu
なしの関数で同様のコードが正常に機能する理由がわかりませんか? struct xStruct
コンパイラには、クラス定義中のコード分析のより厳密なアルゴリズムがあるようです...