尝试构建项目时收到“结构类型重定义”错误

时间:2019-05-19 17:05:51

标签: c++ struct

我正在构建一个小型游戏引擎,并且在我的Graphics.h文件中创建了两个结构。但是,当我尝试构建项目时,两个结构都出现“结构”类型的重新定义错误。

谷歌搜索此错误时,许多人的问题似乎是他们没有使用包括卫兵并得​​到了循环依赖,或者实际上他们确实在.cpp文件中对结构进行了重新定义。

我在头文件中使用"pragma once",但我认为#pragma once可能以某种方式引起了问题,因此我尝试使用include防护,但重新定义错误并没有消失。

当查看我的.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防护。

如果有人可以帮助我解决此问题,我将不胜感激。 谢谢。

编辑: 我得到的错误如下:

错误C2011'顶点':'结构'类型的重定义文件:Graphics.h行:3

错误C2011'ObjectConstants':'struct'类型重新定义文件:Graphics.h行:8

我正在使用的编译器是msvc编译器。我正在使用VS2019。

0 个答案:

没有答案