Syntax Error: missing ; before *
Syntax Error: missing ; before *
当我尝试 运行 这些 headers:
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;
};
Triangle.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;
与 class 名称不匹配 SimpleShaderResource
。
修复后将成为循环依赖问题。
#pragma once
should prevent circular includes so what did I wrong?
没有。 #pragma once 旨在保证当前文件在一次编译中只包含一次。防止循环包含仍然是您的责任。
并且您将 "SimpleShaderRessource.h"
包含在 Direct3D.h
中,并将 "Direct3D.h"
包含在 SimpleShaderRessource.h
中。
似乎classDirect3D
在SimpleShaderRessource.h
中没有使用,所以只需从SimpleShaderRessource.h
(和Triangle.h
)中删除#include "Direct3D.h"
。
只包含必要的文件是个好习惯。
在 SimpleShaderResource.h
中,您预先包含了一些其他 headers。如果它们包含任何 incompleteness/errors - 编译器在分析 SimpleShaderResource.h
.
中的以下代码时可能会遇到问题
由于这些 headers 似乎不是外部的(您将它们包含在 "" 中,而不是 < >),所以它们可能是您的。仔细检查它们,或者尝试注释掉它们(程序将无法编译,但可能会更容易找到有问题的;通常是最后一个包括在内)
当我尝试 运行 这些 headers:
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;
};
Triangle.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;
与 class 名称不匹配 SimpleShaderResource
。
修复后将成为循环依赖问题。
#pragma once
should prevent circular includes so what did I wrong?
没有。 #pragma once 旨在保证当前文件在一次编译中只包含一次。防止循环包含仍然是您的责任。
并且您将 "SimpleShaderRessource.h"
包含在 Direct3D.h
中,并将 "Direct3D.h"
包含在 SimpleShaderRessource.h
中。
似乎classDirect3D
在SimpleShaderRessource.h
中没有使用,所以只需从SimpleShaderRessource.h
(和Triangle.h
)中删除#include "Direct3D.h"
。
只包含必要的文件是个好习惯。
在 SimpleShaderResource.h
中,您预先包含了一些其他 headers。如果它们包含任何 incompleteness/errors - 编译器在分析 SimpleShaderResource.h
.
中的以下代码时可能会遇到问题
由于这些 headers 似乎不是外部的(您将它们包含在 "" 中,而不是 < >),所以它们可能是您的。仔细检查它们,或者尝试注释掉它们(程序将无法编译,但可能会更容易找到有问题的;通常是最后一个包括在内)