2013-07-18 20 views
0

我一直在致力於DirectX,我有一個Array<byte>^函數來讀取程序中的着色器。該函數在3天前製作的程序中運行,但後來我移植了整個項目以使用XAML,並且所有工作基本相同,只是此功能現在顯示錯誤。該功能是:我的數組<byte> ^函數在以前的項目中工作,但不在最近的項目中

Array<byte>^ LoadShader(std::string File){ 
    Array<byte>^ FileData = nullptr; 
    std::ifstream VertexFile(File, std::ios::in | std::ios::binary | std::ios::ate); 

    if(VertexFile.is_open()){ 
     int Length = (int)VertexFile.tellg(); 
     FileData = ref new Array<byte>(Length); 
     VertexFile.seekg(0, std::ios::beg); 
     VertexFile.read(reinterpret_cast<char*>(FileData->Data), Length); 
     VertexFile.close(); 
    }; 
    return FileData; 
}; 

它放在一個頭文件,並提出了3個錯誤是:

error C2143: syntax error : missing ';' before '< 
error C2334: unexpected token(s) preceding '{'; skipping apparent function body 
error C4430: missing type specifier - int assumed. Note: C++ does not support default-in 

,我只是不知道該怎麼辦......我已經檢查拼寫正確的頭文件,功能是Array<byte>^類型,我敢肯定我沒有跳過頭文件中唯一的正文函數。

如果我刪除函數,頭文件的工作原理,我只是困惑,不知道如何解決這個問題。作爲參考,我會在下面發佈完整的頭文件(它不是那麼大)。

#pragma once 

#include "DirectXHelper.h" 
#include <fstream> 


ref class DirectXBase abstract{ 
internal: 
    DirectXBase(); 

public: 
    virtual void Initialize(Windows::UI::Core::CoreWindow^ m_window, Windows::UI::Xaml::Controls::SwapChainBackgroundPanel^ m_panel); 
    virtual void CreateDeviceResources(); 
    void CreateDepthStencil(); 
    void CreatePipeline(); 
    virtual void Render(); 

protected private: 
    Array<byte>^ LoadShader(std::string File){ 
     Array<byte>^ FileData = nullptr; 
     std::ifstream VertexFile(File, std::ios::in | std::ios::binary | std::ios::ate); 

     if(VertexFile.is_open()){ 
      int Length = (int)VertexFile.tellg(); 
      FileData = ref new Array<byte>(Length); 
      VertexFile.seekg(0, std::ios::beg); 
      VertexFile.read(reinterpret_cast<char*>(FileData->Data), Length); 
      VertexFile.close(); 
     }; 
     return FileData; 
    }; 


protected private: 
    Platform::Agile<Windows::UI::Core::CoreWindow> window; 
    Windows::UI::Xaml::Controls::SwapChainBackgroundPanel^ panel; 

    Microsoft::WRL::ComPtr<ID3D11Device1>   DXDevice; 
    Microsoft::WRL::ComPtr<ID3D11DeviceContext1> DXContext; 
    Microsoft::WRL::ComPtr<IDXGISwapChain1>  SwapChain; 
    Microsoft::WRL::ComPtr<ID3D11RenderTargetView> RTView; //Render Target View 
    Microsoft::WRL::ComPtr<ID3D11DepthStencilView> DepthView; //3D Depth Stencil View 
    Microsoft::WRL::ComPtr<ID3D11Texture2D>  DepthBuffer; 
    Microsoft::WRL::ComPtr<ID3D11InputLayout>  InLayout; 
    Microsoft::WRL::ComPtr<ID3D11VertexShader>  VShader; //Vertex Shader 
    Microsoft::WRL::ComPtr<ID3D11PixelShader>  PShader; //Pixel Shader 

}; 
+0

您是否嘗試過使用小寫'數組'?如在'array ^'? –

回答

2

嗯。您以前的使用是否有可能在Array<byte>以上的文件中有using namespace Platform;

如果這樣可以解釋爲什麼它不起作用。

+0

非常感謝你......我沒有意識到我沒有在頭文件中的平臺名稱空間,而是我在.cpp文件中它,它看起來像它會工作。無論如何,再次感謝我在這方面慢慢變得更好,並脫離了我的第一個「Hello Worls」計劃。 :) –

相關問題