c++ - 语法错误 : identifier not found. .. 但我已经包含了它? C++

标签 c++

我有一个游戏类-

游戏.h:

#pragma once

#include "D3DGraphics.h"
#include "Mouse.h"
#include "Screen.h"
#include "Script.h"

class Game
{
public:
    Game( HWND hWnd, const MouseServer &mouseServer, const ScreenServer &screenServer );
    void Go();
    void Config();

private:    
    void ComposeFrame();

    D3DGraphics gfx;
    MouseClient mouse;
    ScreenClient screen;

    Script * scripts[ 1 ];
};

我有一个 D3DGraphics 类 -

D3DGraphics.h:

#pragma once

#include <d3d9.h>
#include <d3dx9.h>

#include "Screen.h"
#include "Script.h"

#define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)

struct CUSTOMVERTEX
{
    FLOAT x, y, z, rhw;    // from the D3DFVF_XYZRHW flag
    DWORD color;    // from the D3DFVF_DIFFUSE flag
};

class D3DGraphics
{
public:
    D3DGraphics( HWND hWnd, ScreenClient screenClient );
    ~D3DGraphics();

    void Begin();
    void End();
    void Present();

    void CreateViewport();
    void DefineText( Script *script );

    LPDIRECT3D9 d3dObject;
    LPDIRECT3DDEVICE9 d3dDevice;
    D3DPRESENT_PARAMETERS presParams;
    HRESULT hr;

    float ResizeLockRatio( float width, float height, float scalingWidth );
    float GetGameOffset( float resizedImageHeight );

    void DrawRectangle( int x, int y, int width, int height, D3DCOLOR backgroundColor );
    void DrawActionBar();
    void RenderText( Script *script );
private:
    LPDIRECT3DVERTEXBUFFER9 vBuffer;
    ScreenClient screen;
};

注意 Game 类有两个

D3DGraphics gfx;
Script * scripts[ 1 ];

在我的 Game.cpp 中,我制作了一个 D3DGraphics 版本并将其放在 gfx 中:

游戏.cpp:

#include "Game.h"

Game::Game( HWND hWnd, const MouseServer &mouseServer, const ScreenServer &screenServer )
    :   mouse( mouseServer ),
        screen( screenServer ),
        gfx( hWnd, screen )
{
    //gfx.d3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE);

    std::string debugStringResult;
    std::stringstream debugString;
    debugString << "Mouse X: " << mouse.GetMouseX() << ",\nMouse Y: " << mouse.GetMouseY() << ",\nLeft mouse down: " << mouse.LeftMouseDown() << ",\nRight mouse down: " << mouse.RightMouseDown() << ",\nScreen width: " << screen.GetScreenWidth() << ",\nScreen height: " << screen.GetScreenHeight() << "\nSystem resolution: " << screen.GetWindowWidth() << " x " << screen.GetWindowHeight();
    debugStringResult = debugString.str();
        scripts[ 0 ] = new Script( gfx, "Arial", 0, 0, 255, 0, debugStringResult, 10, 10, ( screen.GetWindowWidth() - 10 ), ( screen.GetWindowHeight() - 10 ) );
}

我有一个脚本类 -

脚本.h:

#pragma once

#include "D3DGraphics.h"
#include <sstream>

class Script
{
public: 
    Script( D3DGraphics gfx,
            LPCSTR font, 
            int alpha, int r, int g, int b, 
            std::string text, 
            float x, float y, float width, float height );

    LPCSTR font;
    int alpha, r, g, b;
    std::string text;
    float x, y, width, height;
    D3DCOLOR color;
    RECT rect;
    ID3DXFont *handle;
private:
};

我的脚本构造函数如下所示:

脚本.cpp:

#include "Script.h"

Script::Script( D3DGraphics gfx,
                LPCSTR font, 
                int alpha, int r, int g, int b, 
                std::string text, 
                float x, float y, float width, float height )
{
    gfx.DefineText( this );
}

等等。现在,当我编译我的应用程序时出现错误:

Error   1   error C2061: syntax error : identifier 'D3DGraphics'    c:\users\james\documents\visual studio 2012\projects\thegame\thegame\script.h   9   1   TheGame
Error   8   error C2061: syntax error : identifier 'D3DGraphics'    c:\users\james\documents\visual studio 2012\projects\thegame\thegame\script.h   9   1   TheGame
Error   9   error C2661: 'Script::Script' : no overloaded function takes 11 arguments   c:\users\james\documents\visual studio 2012\projects\thegame\thegame\game.cpp   14  1   TheGame
Error   10  error C2061: syntax error : identifier 'Script' c:\users\james\documents\visual studio 2012\projects\thegame\thegame\d3dgraphics.h  28  1   TheGame
Error   11  error C2061: syntax error : identifier 'Script' c:\users\james\documents\visual studio 2012\projects\thegame\thegame\d3dgraphics.h  40  1   TheGame
Error   12  error C2660: 'D3DGraphics::DefineText' : function does not take 1 arguments c:\users\james\documents\visual studio 2012\projects\thegame\thegame\script.cpp 9   1   TheGame
Error   13  error C2061: syntax error : identifier 'D3DGraphics'    c:\users\james\documents\visual studio 2012\projects\thegame\thegame\script.h   9   1   TheGame
Error   16  error C2061: syntax error : identifier 'D3DGraphics'    c:\users\james\documents\visual studio 2012\projects\thegame\thegame\script.h   9   1   TheGame

Script.h 的第 9 行是:

Script( D3DGraphics gfx,...

老实说,我不知道到底发生了什么?有没有人知道,在过去的 2 个小时里,我一直在像死动物一样戳代码。

最佳答案

正如 Need4Sleep 所提到的,您对 D3DGraphics.hScript.h 的循环包含是问题所在。解决此问题的一种方法是仅转发声明脚本类,而不是将其 header 包含在 D3DGraphics.h 中。

例如:

#pragma once

#include <d3d9.h>
#include <d3dx9.h>

#include "Screen.h"

#define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)

class Script;
struct CUSTOMVERTEX
{
    FLOAT x, y, z, rhw;    // from the D3DFVF_XYZRHW flag
    DWORD color;           // from the D3DFVF_DIFFUSE flag
};

class D3DGraphics
{
public:
    D3DGraphics( HWND hWnd, ScreenClient screenClient );
    ~D3DGraphics();

    // rest of D3DGraphics's definition
};

只要 D3DGraphics 没有以实质性方式使用您的 Script 类的内联方法,这就会起作用。例如。指向脚本的指针很好。

关于c++ - 语法错误 : identifier not found. .. 但我已经包含了它? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16640914/

相关文章:

c++ - boost::mem_fn 的正确类型是什么?

c++ - C++ 中的 Hashmap 不对元素进行排序?

c++ - 为什么有些人将 f 附加到变量的末尾?

c++ - 为什么在没有明确的 return 语句的情况下,递归的 return 调用会脱离堆栈?

c++ - C++ 中的内部 typedef - 好风格还是坏风格?

c++ - 为什么 std::remove for file 总是返回 -1?

c++ - Visual Studio 错误 LINK1120

c++ - Unique_ptr 和前向声明

c++ - 如何将数组限制为特定大小(以千字节为单位)

c++ - 使用模板函数计算数组中元素的数量