运行代码时,我遇到了一个奇怪的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)
....
答案 0 :(得分:1)
我通过将structs.h
文件拆分为单独的文件解决了这个问题:
Point3DStruct.h
和DeviceStructure.h
。
现在需要在structs.h
和matrices.h
之间建立循环依赖关系。