C++ 语法错误:缺少;以前*

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

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

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   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
中有一个输入错误:double
ss
。类名是
classsimpleshaderresource
,@marcinj我错过了那个输入错误……无论如何,在修复它之后,我们仍然会面临循环依赖。我会在答案中加上这个…是的,那是个错误。谢谢。我会尽快把答案设为:)@Rafiwui不客气。顺便说一句,只包含你需要的是一个好习惯。是的,通常我会这样做,但在本例中,我在我的
Direct3D.h
中包含了
d3d11.h
,不想再将其包含在其他内容中,因为我不得不再次编写
pragma注释(…)
。但是我的一个朋友告诉我把它们放在主管道里,现在它更干净了。再次感谢您的帮助。@songyuanyao您确定这是由循环依赖引起的吗?OP在第34行有一个错误,在Direct3D.h的这一行有
SimpleShaderResource*g_pSimpleShader。在
SimpleShaderResource
中有一个输入错误:double
ss
。类名是
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