语法错误: 缺少 ;以前*



当我尝试运行这些标头时:

Direct3D.h

#pragma once
//Library Linker
#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "dxgi.lib")
//Includes
#include <d3d11.h>
//My Includes
#include "SimpleShaderRessource.h"

class Direct3D
{
public:
    Direct3D();
    ~Direct3D();
    bool Initialize(HWND);
    bool Run();
    void Shutdown();
private:
public:
private:
    ID3D11Device* g_pDevice;
    ID3D11DeviceContext* g_pDeviceContext;
    IDXGISwapChain* g_pSwapChain;
    ID3D11RenderTargetView* g_pRenderTargetView;
    SimpleShaderRessource* g_pSimpleShader;
};

SimpleShaderResource.h

#pragma once
//My Includes
#include "Direct3D.h"
//Library Inludes
#include "CGE_Lib.h"
//Models
#include "Triangle.h"

struct SimpleShaderVertex
{
    CGE::Vector3D position;
    //CGE::Color color;
};
class SimpleShaderResource
{
public:
    SimpleShaderResource();
    ~SimpleShaderResource();
    bool Initialize(ID3D11Device*, ID3D11DeviceContext*, HWND, WCHAR*, WCHAR*);
    bool Render();
    void Shutdown();
private:
    void OutputShaderErrorMessage(ID3DBlob*, HWND, WCHAR*);
public:
    ID3D11InputLayout* g_pLayout;
    Triangle* g_pModel;
};

三角形.h

#pragma once
#include "Direct3D.h"
class Triangle
{
public:
    Triangle();
    ~Triangle();
    bool Initialize(ID3D11Device*);
    void Shutdown();

    ID3D11Buffer* g_pVertexBuffer;
    ID3D11Buffer* g_pIndexBuffer;
    UINT g_indexCount;
};

我从VS2015收到这些错误:

C2143   syntax error: missing ';' before '*'    simpleshaderresource.h  34  
C4430   missing type specifier - int assumed. Note: C++ does not support default-int    simpleshaderresource.h  34  
C2238   unexpected token(s) preceding ';'   simpleshaderresource.h  34  
C2143   syntax error: missing ';' before '*'    direct3d.h  34  
C4430   missing type specifier - int assumed. Note: C++ does not support default-int    direct3d.h  34  
C2238   unexpected token(s) preceding ';'   direct3d.h  34  

但我看不出这些语法错误应该来自哪里。 #pragma once应该防止循环包括,所以我做错了什么?

首先,正如@marcinj指出的那样,有一个错字。在Direct3D.h中,SimpleShaderRessource* g_pSimpleShader;与类名SimpleShaderResource不匹配。

修复后,它将成为循环依赖项问题。

#pragma once应该防止循环包括,所以我错了什么?

No. #pragma once旨在保证当前文件在单个编译中仅包含一次。防止循环包括仍然是您的责任。

你在Direct3D.h中包括"SimpleShaderRessource.h",在SimpleShaderRessource.h中包括"Direct3D.h"

似乎类 Direct3D 没有在 SimpleShaderRessource.h 中使用,所以只需从SimpleShaderRessource.h(和Triangle.h)中删除#include "Direct3D.h"即可。

只包含必要的文件是一个好习惯。

SimpleShaderResource.h中,您可以在前面包含一些其他标头。如果它们包含任何不完整/错误 - 编译器在分析以下代码时可能会遇到问题 SimpleShaderResource.h .

由于这些标头似乎不是外部的(您用 " 而不是 <> 包含它们),因此它们可能是您的。仔细检查它们,或者尝试将它们注释掉(程序不会编译,但也许更容易找到有罪的;它通常是最后一个包含的)

相关内容

  • 没有找到相关文章

最新更新