-1

运行代码时出现奇怪的 C2535 错误。它由三个主要类组成(总结如下)。它们之间存在一些循环依赖关系,但它们前面有#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;

这是我的第二个文件:

//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);
    }

....
}

我的第三个文件:

//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 回答