0

最近DirectXに取り組んでいてArray<byte>^、プログラムにシェーダーを読み込む機能があります。関数は 3 日前のように作成したプログラムで動作しますが、プロジェクト全体を XAML で動作するように移植しました。この関数がエラーを表示することを除いて、すべてが基本的に同じように動作します。機能は次のとおりです。

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

};
4

1 に答える 1

2

うーん。以前の使用がusing namespace Platform;ファイルのどこかに の使用より上にあった可能性はありArray<byte>ますか?

もしそうなら、それはなぜそれが機能しないのかを説明するでしょう.

于 2013-07-18T18:38:00.593 に答える