C++ C++;成员声明中不允许使用限定名

C++ C++;成员声明中不允许使用限定名,c++,error-handling,directx,direct3d,C++,Error Handling,Directx,Direct3d,我正在学习2012年的Fleeps旧教程之一。我遇到了speedbump,此错误:成员声明中不允许使用限定名称。 我尝试更改SDK,在main.cpp文件中定义/声明该类。所有这些都不起作用。 这是我遇到错误的头文件 #pragma once #include <Windows.h> #include "d3d9.h" #include <ctime> #include <iostream> #define D3DHOOK_TEXTURES #define

我正在学习2012年的Fleeps旧教程之一。我遇到了speedbump,此错误:成员声明中不允许使用限定名称。 我尝试更改SDK,在main.cpp文件中定义/声明该类。所有这些都不起作用。 这是我遇到错误的头文件

#pragma once

#include <Windows.h>
#include "d3d9.h"
#include <ctime>
#include <iostream>

#define D3DHOOK_TEXTURES
#define MAX_MENU_ITEMS 6
#define WALLHACK 0
#define CUSTOM_CROSSHAIR 1
#define NO_RECOIL 2
#define UNLIM_AMMO 3
#define AUTO_FIRE 4
#define HIDE_MENU 5

class Hacks {
public:
    int m_Stride;

    void Hacks::CreateFont(IDirect3DDevice9 *d3dDevice, std::string choiceFont);
    void Hacks::InitializeMenuItems();
    void Hacks::DrawText(LPCSTR TextToDraw, int x, int y, D3DCOLOR Color);
    void Hacks::DrawMenu(IDirect3DDevice9 *d3dDevice);
    void Hacks::DrawFilledRectangle(int x, int y, int w, int h, D3DCOLOR Color, IDirect3DDevice9 *d3dDevice);
    void Hacks::DrawBorderBox(int x, int y, int w, int h, int thickness, D3DCOLOR Color, IDirect3DDevice9 *d3dDevice);
    void Hacks::KeyboardInput();

    LPDIRECT3DTEXTURE9 texRed;
    LPDIRECT3DTEXTURE9 texGreen;
    LPDIRECT3DTEXTURE9 texBlue;
    LPDIRECT3DTEXTURE9 texWhite;

    D3DVIEWPORT9 ViewPort;

    LPD3DXFONT Font;

    struct d3dMenuHack {
        bool on;
        std::string name;
    };

    d3dMenuHack hack[MAX_MENU_ITEMS];
};
#pragma一次
#包括
#包括“d3d9.h”
#包括
#包括
#定义D3DHOOK_纹理
#定义最大菜单项6
#定义WALLHACK 0
#定义自定义十字线1
#定义无反冲2
#定义非弹药3
#定义自动点火4
#定义隐藏菜单5
课堂黑客{
公众:
内迈步;
void Hacks::CreateFont(IDirect3DDevice9*d3dDevice,std::string choiceFont);
void Hacks::InitializeMenuItems();
void Hacks::DrawText(LPCSTR TextToDraw、int x、int y、D3DCOLOR Color);
void Hacks::DrawMenu(IDirect3DDevice9*d3dDevice);
void Hacks::DrawFilledRectangle(整数x、整数y、整数w、整数h、D3DCOLOR、IDirect3DDevice9*d3dDevice);
void Hacks::DrawBorderBox(int x、int y、int w、int h、int thickness、D3D彩色、IDirect3DDevice9*D3D设备);
void Hacks::KeyboardInput();
LPDIRECT3DTEXTURE9 texRed;
LPDIRECT3DTEXTURE9 texGreen;
LPDIRECT3DTEXTURE9 texBlue;
LPDIRECT3DTEXTURE9 texWhite;
D3DVIEWPORT9视口;
LPD3DXFONT字体;
结构d3dMenuHack{
布隆;
std::字符串名;
};
d3dMenuHack hack[最大菜单项];
};

当我声明“void Hacks::”时,错误正在发生。。。功能。有什么建议吗?

没有在成员声明中使用的限定名称。你的书中使用了哪种编译器

class Hacks {
    public:
        int m_Stride;

        void CreateFont(IDirect3DDevice9 *d3dDevice, std::string choiceFont);
        void InitializeMenuItems();
        void DrawText(LPCSTR TextToDraw, int x, int y, D3DCOLOR Color);
        void DrawMenu(IDirect3DDevice9 *d3dDevice);
        void DrawFilledRectangle(int x, int y, int w, int h, D3DCOLOR Color, IDirect3DDevice9 *d3dDevice);
        void DrawBorderBox(int x, int y, int w, int h, int thickness, D3DCOLOR Color, IDirect3DDevice9 *d3dDevice);
        void KeyboardInput();

        LPDIRECT3DTEXTURE9 texRed;
        LPDIRECT3DTEXTURE9 texGreen;
        LPDIRECT3DTEXTURE9 texBlue;
        LPDIRECT3DTEXTURE9 texWhite;

        D3DVIEWPORT9 ViewPort;

        LPD3DXFONT Font;

        struct d3dMenuHack {
            bool on;
            std::string name;
        };

        d3dMenuHack hack[MAX_MENU_ITEMS];
    };

也许nikau6的答案乍一看不是很清楚,因为代码似乎与OP中的代码相同


因此,解决方案是从您的所有声明中删除Hacks::在Visual Studio 2019中构建传统的Direct Show筛选器时,我必须将
一致性模式设置为否。这允许代码不符合标准


正如一些人所说的那样,上述做法很糟糕。但是对于遗留代码,通常不适合(或不可能)使其遵循最佳实践。

删除这些
黑客::
s。我已尝试更改SDK,在main.cpp文件中定义/声明类。所有这些都不起作用,这表明,遵循一个不教C++编程的教程是浪费时间的。没有一个有信誉的C++书会显示出这样一个类,这个错误是这样编码的。@宋元耀,谢谢。这比这个问题要好,我现在可以编译这个项目了。虽然在我构建它时,它给了我这个错误“error LNK2001:unresolved external symbol _vsnprintf”,但您得到的是链接错误,因为旧版DirectX SDK与VS 2015或VS 2017不完全兼容。看,现在没有理由花时间学习Direct3 9。看看DirectX 11。看见Direct3D 9的一本老书/教程也很可能使用比C++ 11/C++ 14语言更古老的C++编码风格。谢谢提示!在使用Visual Studio 2017从Windows SDK 8.1编译标题时,我也遇到了奇怪的遗留代码-在
等中都有这样的地方。