【问题标题】:C3767: candidate function(s) not accesibleC3767: 候选函数不可访问
【发布时间】:2014-01-22 23:37:06
【问题描述】:

我有这门课:

#pragma once

#ifndef _DEFINES_H_
#include "Defines.h"
#endif
#ifndef _GAMETIME_H_
#include "GameTime.h"
#endif
#ifndef _UTILITIES_H_
#include "Utilities.h"
#endif

#ifndef _GAME_H_

using namespace System;

namespace BSGameFramework
{
public ref class Game
{
    public:

        Game();
        virtual ~Game();

        void Run(HINSTANCE instance);

        string Title;
        int WindowWidth;
        int WindowHeight;

    protected:

        virtual void Initialize();
        virtual void LoadContent();
        virtual void UnloadContent();
        virtual void Update(GameTime^ gameTime);
        virtual void Draw(GameTime^ gameTime);

    private:

        HINSTANCE windowHandler;
        HWND window;
        DateTime lastTime;
        TimeSpan totalGameTime;

        D3D_DRIVER_TYPE driverType_;
        D3D_FEATURE_LEVEL featureLevel_;

        ID3D11Device* d3dDevice_;
        ID3D11DeviceContext* d3dContext_;
        IDXGISwapChain* swapChain_;
        ID3D11RenderTargetView* backBufferTarget_;

        void Shutdown();
};
}

#define _GAME_H_

#endif

这是它的孩子:

#pragma once

using namespace BSGameFramework;

public ref class MyGame : Game
{
public:

    MyGame()
    {

    }
};

然后在我的 Main 上调用我的 Run 函数:

#include <Windows.h>
#include "MyGame.h"

using namespace BSGameFramework;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
MyGame ^game = gcnew MyGame();

game->Run(hInstance); // Here the error
}

我收到此错误:

Error   1   error C3767: 'BSGameFramework::Game::Run': candidate function(s) not accessible
C:\Users\Nicola\Desktop\directx prove\BSGameFramework\FrameworkTestCpp\Main.cpp 10  1   FrameworkTestCpp

我尝试从 Run 参数中删除 HINSTANCE 并且一切正常,但我需要它以便有人可以解释我为什么会收到此错误以及如何解决?提前致谢!

【问题讨论】:

  • 我正在检查,我会告诉你,tnx :D
  • 关于你通过我的问题的解决方案,他们说问题是在 CLI C++ 编译器上,本机类型默认是私有的,所以他们说要为制作的人使用 #pragma make_public问题有效,但不适用于我,现在我收到此错误:错误 2 错误 C2158: 'HINSTANCE' : #pragma make_public 指令目前仅支持本机非模板类型 c:\users\nicola\desktop\directx证明\bsgameframework\bsgame\Defines.h 11 1 BSGame

标签: managed-c++ hinstance


【解决方案1】:

我是这样解决的:

inline void Game::Run(IntPtr instance)
{
windowHandler = (HINSTANCE)instance.ToPointer();


// other code
}

现在我正在传递一个不是本机类型的 IntPtr,所以在主函数上我有这个:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
MyGame ^game = gcnew MyGame();

IntPtr instance(hInstance);

game->Run(instance);
}

【讨论】:

    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多