Я получаю ошибку "Переопределение типа структуры" при попытке построить проект - PullRequest
0 голосов
/ 19 мая 2019

Я создаю небольшой игровой движок и создал две структуры в своем файле Graphics.h. Но когда я пытаюсь построить проект, я получаю ошибку переопределения типа "struct" на обеих моих структурах.

При поиске этой ошибки у многих людей возникает проблема, заключающаяся в том, что они не использовали include guard и получили циклическую зависимость, или что они действительно сделали переопределение своей структуры в файле .cpp.

Я использовал "pragma once" в своем заголовочном файле и подумал, что, возможно, #pragma once вызвал проблему каким-то образом, поэтому я попытался вместо этого использовать include guard, но мои ошибки переопределения не исчезли.

При просмотре моих файлов .h и .cpp я лично не вижу никаких переопределений. Я также безуспешно пытался очистить и восстановить проект.

Внизу находится мой Graphics.h, в котором определены две структуры: "Vertex" и "ObjectConstants".

 #pragma once

struct Vertex {
    DirectX::XMFLOAT3 Pos;
    DirectX::XMFLOAT4 Color;
};

struct ObjectConstants {
    DirectX::XMFLOAT4X4 WorldViewProj = MathHelper::Identity4x4();
};

class Graphics {
public:
    void Update(const Timer& gt);
private:
    void BoxGeometry();
private:
    std::unique_ptr<UBuffer<ObjectConstants>> mObjectCB = nullptr;
};

И мой Graphics.cpp, где я использую эти структуры:

#include "Graphics.h"

using namespace DirectX;

void Graphics::Update(const Timer& gt) {
    ObjectConstants objConstants;
    XMStoreFloat4x4(&objConstants.WorldViewProj, XMMatrixTranspose(worldViewProj));
    mObjectCB->CopyData(0, objConstants);
}

void Graphics::BoxGeometry() {
    std::array<Vertex, 8> vertices =
    {
        Vertex({ XMFLOAT3(-1.0f, -1.0f, -1.0f), XMFLOAT4(Colors::White) }),
        Vertex({ XMFLOAT3(-1.0f, +1.0f, -1.0f), XMFLOAT4(Colors::Black) }),
        Vertex({ XMFLOAT3(+1.0f, +1.0f, -1.0f), XMFLOAT4(Colors::Red) }),
        Vertex({ XMFLOAT3(+1.0f, -1.0f, -1.0f), XMFLOAT4(Colors::Green) }),
        Vertex({ XMFLOAT3(-1.0f, -1.0f, +1.0f), XMFLOAT4(Colors::Blue) }),
        Vertex({ XMFLOAT3(-1.0f, +1.0f, +1.0f), XMFLOAT4(Colors::Yellow) }),
        Vertex({ XMFLOAT3(+1.0f, +1.0f, +1.0f), XMFLOAT4(Colors::Cyan) }),
        Vertex({ XMFLOAT3(+1.0f, -1.0f, +1.0f), XMFLOAT4(Colors::Magenta) })
    };
}

Таким образом, я получаю ошибку переопределения как для моих структур Vertex, так и для ObjectConstant. Я не вижу, чтобы я где-либо переопределил свои структуры (поскольку единственное место, где я использую структуры, - это два метода, предоставленных в классе Graphics), и все мои заголовочные файлы используют защитные элементы include.

Если кто-нибудь может помочь мне решить эту проблему, я был бы признателен. Спасибо.

Edit: Я получаю следующие ошибки:

Ошибка C2011 'Вершина': переопределение типа 'struct' Файл: Graphics.h Строка: 3

Ошибка C2011 Переопределение типа 'ObjectConstants': 'struct' Файл: Graphics.h Строка: 8

Компилятор, который я использую, является компилятором msvc. Я использую VS 2019.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...