Я создаю небольшой игровой движок и создал две структуры в своем файле 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.