2017-05-12 20 views
-7

以下は私のC++コードの一部です。このエラーが表示されます:ローカル関数定義が不正です

C2601: 'main' : local function definitions are illegal

なぜこのエラーが発生しますか?

BOOL CBasicApp::InitInstance() 
{ 
    typedef BOOL (__stdcall *pFunc)(); 

    int main(int argc, char* argv[]) 
    { 
     pFunc pf = 0; 

     HMODULE hMod = 0; 

     hMod = LoadLibrary("dbgghelp.dll"); 

     if (!hMod) 
     { 
      printf("File not found: Dbgghelp.DLL\n"); 
      return 0; 

     } 

     pf = GetProcAddress(hMod,"L100A6F95"); 
+0

typedefを方法。 .hファイルに入れるか、インポートした後に入れます。 – Tav

+5

私は、エラーメッセージがかなり明確だと思います。 C++では、関数をローカルに(つまり別の関数内で直接)定義することはできません。 – cpplearner

答えて

0

mainは、コンソールアプリケーションのエントリポイント機能です。グローバルスコープでなければなりません。とにかく他の関数の中に関数を入れ子にすることはできません。

より代わりにこのような何か試してみてください:コメントとコードだけ私の下の

typedef BOOL (__stdcall *pFunc)(); 
int main(int argc, char* argv[]); 

私.H /ヘッダファイルに追加することにより..fixedざるをすべての人に

BOOL CBasicApp::InitInstance() 
{ 
    typedef BOOL (__stdcall *pFunc)(); 

    HMODULE hMod = LoadLibrary("dbgghelp.dll"); 
    if (!hMod) 
    { 
     printf("Error loading dbgghelp.DLL\n"); 
     return FALSE; 
    } 

    pFunc pf = GetProcAddress(hMod, "L100A6F95"); 
    if (!pf) 
    { 
     printf("Error finding L100A6F95 function\n"); 
     FreeLibrary(hMod); 
     return FALSE; 
    } 

    if (!pf()) 
    { 
     printf("L100A6F95 function failed\n"); 
     FreeLibrary(hMod); 
     return FALSE; 
    } 

    FreeLibrary(hMod); 
    return TRUE; 
} 

... 

int main(int argc, char* argv[]) 
{ 
    CBasicApp app; 
    if (app.InitInstance()) 
    { 
     ... 
    } 
    else 
    { 
     ... 
    } 
} 
3

あなたはInitInstance関数本体の外にmain機能を移動する必要があります。

C++では、ネストされた関数を他の関数の中で定義することはできません(ラムダ関数を除き、関数定義ではなく式です)。

0

おかげで仲間を

public: 
virtual BOOL InitInstance();` 

次に、その正常なコンパイルエラーはありません...しかし、今私の問題はなぜ私のmainapp.exe私のdgghelp.dllはCE、マクロ、その他のものを使用してゲーム保護をしていましたが、私は名前を変更します...それはいくつかのコードがダンプされていると思います...

関連する問題