C ++错误C2535,即使我使用pragma一次

时间:2014-02-02 14:15:50

标签: c++ visual-studio-2010 compiler-errors pragma ifndef

运行代码时,我遇到了一个奇怪的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)
....

1 个答案:

答案 0 :(得分:1)

我通过将structs.h文件拆分为单独的文件解决了这个问题: Point3DStruct.hDeviceStructure.h

现在需要在structs.hmatrices.h之间建立循环依赖关系。