2016-06-01 2 views
0

Когда я пытаюсь запустить эти заголовки:Синтаксис Ошибка: отсутствует; перед тем *

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 должен предотвращать циркуляцию, так что я сделал не так?

+0

пожалуйста, вскрыть вопрос body – Trix

ответ

2

Во-первых, поскольку @marcinj указал, есть опечатка. В Direct3D.h, SimpleShaderRessource* g_pSimpleShader; не соответствует названию класса SimpleShaderResource.

После того, как он установит, что это станет проблемой круговых зависимостей.

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

No. #pragma once предназначен для обеспечения текущего файла, который будет включен только один раз в одном сборнике. Предотвращение циркулярных операций по-прежнему является вашей ответственностью.

И вы включаете "SimpleShaderRessource.h" в Direct3D.h, включая "Direct3D.h" в SimpleShaderRessource.h.

кажется класс Direct3D не используется в SimpleShaderRessource.h, так что просто удалить #include "Direct3D.h" из SimpleShaderRessource.hTriangle.h).

Это хорошая привычка включать только необходимые файлы.

+0

Да, это была ошибка , Большое спасибо. Собираюсь ответить на него как можно скорее :) – Rafiwui

+0

@Rafiwui Добро пожаловать. Кстати, включите только то, что вам нужно, это хорошая привычка. – songyuanyao

+0

Да, я так и делаю, но в этом случае я включил 'd3d11.h' в свой' Direct3D.h' и не хотел его повторно включать в другие, потому что мне пришлось написать комментарий #pragma (...) 'снова. Но мой друг сказал мне положить их в основном, и теперь он чище. Thx за вашу помощь снова. – Rafiwui

0

В комплект поставки SimpleShaderResource.h включены некоторые другие заголовки. Если они содержат какие-либо неполноты/ошибки - компилятор может столкнуться с проблемами при анализе следующего кода в SimpleShaderResource.h.

Поскольку эти заголовки, похоже, не являются внешними (вы включаете их с помощью «», а не <>), поэтому они, вероятно, ваши. Проверьте их внимательно или попробуйте прокомментировать их (программа тогда не будет компилироваться, но, возможно, будет легче найти виновного, как правило, последний из них включен)

Смежные вопросы