C++ 语法错误:缺少;以前*
当我尝试运行这些标题时: Direct3D.h 三角形 我从VS2015中获得了以下错误:C++ 语法错误:缺少;以前*,c++,include-guards,C++,Include Guards,当我尝试运行这些标题时: Direct3D.h 三角形 我从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 un
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
中,SimpleShaderResource*g_pSimpleShader代码>与类名SimpleShaderResource
不匹配
修复后,它将成为一个循环依赖性问题
#pragma once
应该阻止循环包含,那么我错了什么
否。旨在保证当前文件在一次编译中只包含一次。防止循环污染仍然是你的责任
您将在Direct3D.h
中包含“simpleshaderresource.h”
,并在simpleshaderresource.h
中包含“Direct3D.h”
似乎类Direct3D
没有在SimpleShaderResource.h
中使用,所以只需从SimpleShaderResource.h
中删除#包括“Direct3D.h”
(和Triangle.h
)
只包含必要的文件是一个好习惯。首先,正如@marcinj所指出的,有一个输入错误。在Direct3D.h
中,SimpleShaderResource*g_pSimpleShader代码>与类名SimpleShaderResource
不匹配
修复后,它将成为一个循环依赖性问题
#pragma once
应该阻止循环包含,那么我错了什么
否。旨在保证当前文件在一次编译中只包含一次。防止循环污染仍然是你的责任
您将在Direct3D.h
中包含“simpleshaderresource.h”
,并在simpleshaderresource.h
中包含“Direct3D.h”
似乎类Direct3D
没有在SimpleShaderResource.h
中使用,所以只需从SimpleShaderResource.h
中删除#包括“Direct3D.h”
(和Triangle.h
)
只包含必要的文件是一个好习惯。在SimpleShaderResource.h
中,可以预先包含一些其他头文件。如果它们包含任何不完整性/错误-编译器在分析SimpleShareResource.h
中的以下代码时可能会遇到问题
由于这些标题似乎不是外部的(您将它们包含在“”中,而不是<>),因此它们可能是您的。仔细检查它们,或者尝试注释它们(程序将不会编译,但可能会更容易找到有罪的一个;它通常是最后一个包含在内)在SimpleShaderResource.h
中,您预先包含了一些其他标题。如果它们包含任何不完整性/错误-编译器在分析SimpleShareResource.h
中的以下代码时可能会遇到问题
由于这些标题似乎不是外部的(您将它们包含在“”中,而不是<>),因此它们可能是您的。仔细检查它们,或者尝试注释它们(程序将不会编译,但可能更容易找到有罪的一个;它通常是最后一个包含在内)是的,这就是错误所在。谢谢。我会尽快把答案设为:)@Rafiwui不客气。顺便说一句,只包含你需要的是一个好习惯。是的,通常我会这样做,但在本例中,我在我的Direct3D.h
中包含了d3d11.h
,不想再将其包含在其他内容中,因为我不得不再次编写pragma注释(…)
。但是我的一个朋友告诉我把它们放在主管道里,现在它更干净了。再次感谢您的帮助。@songyuanyao您确定这是由循环依赖引起的吗?OP在第34行有一个错误,在Direct3D.h的这一行有SimpleShaderResource*g_pSimpleShader代码>。在SimpleShaderResource
中有一个输入错误:doubless
。类名是classsimpleshaderresource
,@marcinj我错过了那个输入错误……无论如何,在修复它之后,我们仍然会面临循环依赖。我会在答案中加上这个…是的,那是个错误。谢谢。我会尽快把答案设为:)@Rafiwui不客气。顺便说一句,只包含你需要的是一个好习惯。是的,通常我会这样做,但在本例中,我在我的Direct3D.h
中包含了d3d11.h
,不想再将其包含在其他内容中,因为我不得不再次编写pragma注释(…)
。但是我的一个朋友告诉我把它们放在主管道里,现在它更干净了。再次感谢您的帮助。@songyuanyao您确定这是由循环依赖引起的吗?OP在第34行有一个错误,在Direct3D.h的这一行有SimpleShaderResource*g_pSimpleShader代码>。在SimpleShaderResource
中有一个输入错误:doubless
。类名是classsimpleshaderresource
,@marcinj我错过了那个输入错误……无论如何,在修复它之后,我们仍然会面临循环依赖。我将把这个添加到答案中…请取消绑定问题正文请取消绑定问题正文
#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;
};
#pragma once
#include "Direct3D.h"
class Triangle
{
public:
Triangle();
~Triangle();
bool Initialize(ID3D11Device*);
void Shutdown();
ID3D11Buffer* g_pVertexBuffer;
ID3D11Buffer* g_pIndexBuffer;
UINT g_indexCount;
};
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