2014-01-05 3 views
1

을 accesible :C3767 : 후보 기능 (들)하지 내가이 클래스가

#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() 
    { 

    } 
}; 

:

#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 

실행 매개 변수에서 HINSTANCE를 제거하려고 시도했지만 모두 정상적으로 작동하지만 누군가가 왜이 오류가 발생하는지 설명하고 해결 방법을 설명 할 수 있어야합니다. 미리 감사드립니다!

+1

가능한 중복 [ C++ CLI 오류 C3767 : 후보 함수에 액세스 할 수 없음] (http://stackoverflow.com/questions/947213/c-cli-error-c3767-candidate-functions-not-accessible) –

+0

확인 중입니다. 말해봐, tnx : D – ThomasSquall

+0

당신이 나에게 전달한 질문의 해결책에 그들은 문제는 원시 타입이 CLI C++ 컴파일러에서 기본적으로 개인으로 #pragma make_public을 사용하여 질문을 한 사람은 작동하지만 나에게 적합하지 않습니다. 이제 오류 오류 : C2158 : 'HINSTANCE' : #pragma make_public 지시문은 현재 기본 템플릿 이외의 유형에만 지원됩니다. \t c : \ users \ nicola \ desktop \ directx prove \ bsgameframework \ bsgame \ Defines.h BSGame – ThomasSquall

답변

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); 
}