2016-06-01 8 views
0

나는 이러한 헤더 실행하려고 :구문 오류 : 누락; 전 *

#pragma once 

#include "Direct3D.h" 

class Triangle 
{ 
public: 
    Triangle(); 
    ~Triangle(); 

    bool Initialize(ID3D11Device*); 
    void Shutdown(); 


    ID3D11Buffer* g_pVertexBuffer; 
    ID3D11Buffer* g_pIndexBuffer; 

    UINT g_indexCount; 
}; 
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을

내가 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은 순환 포함을 방지해야하므로 잘못되었습니다.

+0

질문 본문을 빗나게하십시오 – Trix

답변

2

먼저 @marcinj가 지적했듯이 오타가 있습니다. Direct3D.h에서 SimpleShaderRessource* g_pSimpleShader;은 클래스 이름 SimpleShaderResource과 일치하지 않습니다.

순환 종속성 문제가 될 것이라고 수정 한 후.

#pragma once should prevent circular includes so what did I wrong?

번호 #pragma once은 한 번에 하나의 컴파일에 포함되는 현재 파일을 보장하도록 설계되었습니다. 순환 포함을 방지하는 것은 여전히 ​​귀하의 책임입니다.

그리고 Direct3D.h"SimpleShaderRessource.h"이 포함되어 있고 "Direct3D.h"에는 SimpleShaderRessource.h이 포함되어 있습니다.

이 클래스 Direct3D 그래서 그냥 SimpleShaderRessource.h (및 Triangle.h)에서 #include "Direct3D.h"를 제거 SimpleShaderRessource.h에서 사용하지 않는 것 같다.

필요한 파일 만 포함하는 것이 좋습니다.

+0

그래, 그게 오류 였어. . 고마워. 최대한 빨리 답변을 드리겠습니다. :) – Rafiwui

+0

@Rafiwui 여러분 환영합니다. 당신이 필요로하는 것만을 포함시키는 것은 좋은 습관이다. – songyuanyao

+0

그래, 보통 그렇습니다.하지만이 경우에는'Direct3D.h'에'd3d11.h'를 포함 시켰고'#pragma comment (...)를 써야하기 때문에 다른 것들에서 다시 포함하고 싶지 않았습니다.)'다시. 하지만 내 친구가 내게 그걸 주머니에 넣으라고했는데 지금은 더 깨끗해. 너의 도움을 다시 Thx. – Rafiwui

0

SimpleShaderResource.h에는 다른 헤더가 포함되어 있습니다. 불완전/오류가있는 경우 컴파일러에서 SimpleShaderResource.h의 다음 코드를 분석 할 때 문제가 발생할 수 있습니다.

이러한 헤더가 외부가 아닌 것처럼 보입니다 (""가 아닌 <> 포함). 따라서 해당 헤더는 아마도 사용자의 것일 수 있습니다. 그들을 신중하게 확인하거나 주석을 달아보십시오. (프로그램은 컴파일되지 않지만 죄책감을 찾는 것이 더 쉬울 것입니다.) 보통