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,

Другие вопросы по тегам