我有一个文件“HSlider.h”,它使用“Draw.h”,在其中定义了使用它们的函数。
但是编译器说我还没有定义它们(找不到标识符)。我在论坛上搜索了类似的错误,但没有帮助。

我在VS 2015社区工作。

错误示例:
错误C3861 DrawGUIBox:找不到标识符
Try2 c:\ users \ lel \ documents \ Visual Studio 2015 \ projects \ try2 \ try2 \ hslider.h 50


HSlider.h

#include <string>
#include <iostream>
#include <map>
#include <iterator>
#include <conio.h>
#include "Offsets.h"

#include "Draw.h"
using namespace std;


class Button
{
public:
    void Init(float _x, float _y, float _w, float _h, int _r, int _g, int _b, int _a, int _rr, int _gg, int _bb, int _aa,int _onr,int _ong,int _onb)
    {
        x = _x;
        y = _y;
        w = _w;
        h = _h;
        r = _r;
        g = _g;
        b = _b;
        a = _a;
        rr = _rr;
        gg = _gg;
        bb = _bb;
        aa = _aa;
        onr = _onr;
        onb = _onb;
        ong = _ong;

    }
    void Move(float _x, float _y)
    {
        x = _x;
        y = _y;
    }
    void Update(int _bindb)
    {
        BindB = _bindb;
        DrawGUIBox(x, y, w, h, r, g, b, a, rr, gg, bb, aa);
        POINT p;
        GetCursorPos(&p);

        if ((p.x > x&&p.x<x + w&&p.y>y&&p.y < y + h))
        {
            if ((GetAsyncKeyState(VK_LBUTTON)&1 ))
            {
                On = !On;

            }



        }
        if ((GetAsyncKeyState(BindB)&1 ))
        {
            On = !On;
        }
        if (On)
        {
            DrawGUIBox(x, y, w, h, r, g, b, a, onr,ong,onb, a);
        }

    }
    bool Extract()
    {
        return On;
    }
    void Off()
    {
        On = false;
    }
private:
    float x;
    float y;
    float w;
    float h;
    int r;
    int g;
    int b;
    int a;
    int rr;
    int gg;
    int bb;
    int aa;
    int onr;
    int ong;
    int onb;
    int BindB;
    bool On = false;
    bool IsUP = true;
};

Draw.h
  #pragma once
    #ifndef HDRAWFUNC_H
    #define HDRAWFUNC_H

    #include "DirectX.h"

    #pragma warning( disable : 4244 ) //remove the incoming warns
    #pragma warning( disable : 4996 ) //remove the incoming warns

    #include <d3dx9.h>
    #include <d3d9.h>
    #define D3DFVF_TL (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)
    #pragma comment(lib, "d3d9.lib")
    #pragma comment(lib, "d3dx9.lib")
    static struct D3DTLVERTEX;
    void GradientFunc(int x, int y, int w, int h, int r, int g, int b, int a);
    void DrawCenterLine(float x, float y, int r, int g, int b, int a);
    void DrawLine(float x, float y, float xx, float yy, int r, int g, int b, int a);
    void DrawCursorLine(float x, float y, float xx, float yy, int r, int g, int b, int a);
    void FillRGB(float x, float y, float w, float h, int r, int g, int b, int a);
    void DrawBox(float x, float y, float width, float height, float px, int r, int g, int b, int a);
    void DrawGUIBox(float x, float y, float w, float h, int r, int g, int b, int a, int rr, int gg, int bb, int aa);
    void DrawHealthBar(float x, float y, float w, float h, int r, int g, int b);
    void DrawHealthBarBack(float x, float y, float w, float h);
    void DrawGroupBox(float x, float y, float w, float h, int r, int g, int b, int a, int rr, int gg, int bb, int aa, char* title);
    int DrawString(char* String, int x, int y, int r, int g, int b, ID3DXFont* ifont);
    int DrawShadowString(char* String, int x, int y, int r, int g, int b, ID3DXFont* ifont);
    void DrawCircle(int x, int y, float radius, int Sides, D3DCOLOR color);
    D3DTLVERTEX CreateD3DTLVERTEX(float X, float Y, float Z, float RHW, D3DCOLOR color, float U, float V);
    void DrawFilledCircle(int xPos, int yPos, int Radius, D3DCOLOR color);
    void FillARGBTriangle(int x1, int y1, int x2, int y2, int x3, int y3, D3DCOLOR color, IDirect3DDevice9 *pDevice);
    #endif

还有整个项目(如果需要)。 https://yadi.sk/d/uOPt8pdC3Jb78o

最佳答案

问题不在源代码中。问题是您的Visual Studio解决方案文件(在发布的链接中)已损坏。在解决方案文件中,有一个名为Try2的项目的引用,但是该项目在解决方案中不存在。

要解决此问题,请执行以下操作。

用 Notepad++ 打开Help.sln文件,您将看到一行

Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Try2", "Try2\Try2.vcxproj", "{BC659ABD-F853-4678-83AF-3D29339A7FC0}"

这意味着应该有一个名为Try2的子项目,但是它不存在。在您的归档文件中,子项目实际上称为“帮助”。因此,将行更改为:
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Help", "Help\Help.vcxproj", "{BC659ABD-F853-4678-83AF-3D29339A7FC0}"

之后,浏览解决方案中的x64文件夹并删除所有引用Try2的残留文件。

或者,创建一个新的空解决方案,并将您的.cpp和.h源文件(仅)一次复制到新解决方案中。

(还有一个单独的问题,其中缺少Offsets.h文件,但我对此无能为力。)

09-06 22:35