コードを実行すると、奇妙な C2535 エラーが発生します。これは、3 つの主要なクラスで構成されます (以下に要約)。それらの間にはいくつかの循環依存関係がありますが、#pragma once
マクロが先行しているため、複数回作成することはできません。次の行でエラーが発生しています。
CVertex(POINT3D p) : nx(0), ny(0), nz(0), nw(0) {
CVertex(p.x, p.y, 0, 1);
それが言うところ:
エラー C2535: CVertex::CVertex(void): メンバー関数は既に定義または宣言されています
これは意味がありません。ガードを使用しているので、一度だけ宣言する必要があります! ガードも#pragma once
試してみましたが、違いはありません。ifndef
これがコードの要約です(重要な部分)
//structs.h
#pragma once
#include matrices.h
typedef struct {
LONG x;
LONG y;
LONG z;
} POINT3D;
typedef struct{
....
Matrix4x4 matrixFour;
...
} DeviceStructure;
これは私の2番目のファイルです:
//matrices.h
#pragma once
#include structs.h
class CVertex {
public:
CVertex(POINT3D x, POINT3D y, POINT3D z) ..... ;
CVertex(POINT3D p) : nx(0), ny(0), nz(0), nw(0) {
CVertex(p.x, p.y, 0, 1);
}
....
}
私の3番目のファイル:
//world.h
#pragma once
#include structs.h
#include matrices.h
.....
(uses stuff from the previous classes)
....