0

オブジェクトを参照する必要があるグローバルに宣言された静的関数がありますが、そうすると、「宣言されていない識別子」エラーが発生します。

ここに私のコードのサンプルがあります

#pragma once

#include "stdafx.h"
#include <vector>
#include "Trigger.h"

using namespace std;

namespace Gamma_Globals
{
    static vector<void*> gvTriggers;
}

static LPARAM CALLBACK ProgramWndProc(HWND, UINT, WPARAM, LPARAM);

static LPARAM CALLBACK ProgramWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_KEYUP:
        {
            for (int i = 0; i < Gamma_Globals::gvTriggers.size(); i++)
            {
                Trigger t = Gamma_Globals::gvTriggers[i];
            }
        }
    default: return DefWindowProc(hWnd, uMsg, wParam, lParam); break;
    }

    return 0;
}

この問題は WM_KEYUP の場合に発生します。「Trigger t」を設定しようとすると、「'Trigger' : undeclared identifier.」というエラーが表示されます。ProgramWndProc から Trigger オブジェクトを参照するにはどうすればよいですか?

ありがとう!


リクエストに応じて、ここに Trigger.h のコピーがあります

#pragma once

#include "Noun.h"
#include "TermFactory.h"
#include "Globals.h"

using namespace std;

class Trigger
{
public:
    enum   TRIGGER_TYPE {NONE, ONKEYPRESS, ONMOUSEPRESS};

    Trigger(void*);
    Trigger(LPTSTR trigger, LPTSTR action, Gamma_Globals::TRIGGER_TIME);
    ~Trigger(void);

    VOID Perform();

    TRIGGER_TYPE GetType();

private:
    LPTSTR        lpCondition;
    LPTSTR        lpAction;
    Gamma_Globals::TRIGGER_TIME triggerTime;
    vector<Noun*> vNouns;
    TRIGGER_TYPE  triggerType;

    VOID LoadAction(LPTSTR Action);
    HRESULT LoadCondition(LPTSTR Condition);
};
4

2 に答える 2

1

trigger.h には globals.h が含まれています。globals.h int には、trigger.h が含まれています。そのため、globals.h のコンパイル中に、コンパイラは Class Trigger を認識していません。

理想的には、コードに循環依存関係がないようにする必要があります。いずれかの trigger.h が globals.h に依存するか、またはその逆の両方ではありません。

これをコンパイルするには、global.cpp を作成し、そこに関数定義を配置します。これは循環依存関係を壊さないことに注意してください。

于 2012-07-19T16:15:49.203 に答える
0

Trigger 型の t に void* を割り当てようとします。

Trigger の ctor は void* を受け入れるため、以下を試してください。

for (int i = 0; i < Gamma_Globals::gvTriggers.size(); i++)
{
    Trigger t( Gamma_Globals::gvTriggers[i] );
}
于 2012-07-19T16:15:43.397 に答える