我有一个文件“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文件,但我对此无能为力。)