-1

コードを実行すると、奇妙な 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)
....
4

1 に答える 1

1

structs.hファイルを別々のファイルに 分割することで問題を回避しました:Point3DStruct.hDeviceStructure.h.

ここで、 と の間に循環依存関係を持たせる必要がありstructs.hますmatrices.h

于 2014-02-02T15:23:54.877 に答える