Visual Studio 2010 — ошибка C ++ C2535, хотя я однажды использую прагму

Я получаю странную ошибку 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

Решение

Я обошел проблему, разделив structs.h файл в отдельные файлы:
Point3DStruct.h а также DeviceStructure.h,

Теперь необходимо иметь круговую зависимость между structs.h а также matrices.h,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]