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 回答