Я получаю странную ошибку 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)
....
Я обошел проблему, разделив structs.h
файл в отдельные файлы:
Point3DStruct.h
а также DeviceStructure.h
,
Теперь необходимо иметь круговую зависимость между structs.h
а также matrices.h
,
Других решений пока нет …