标识符找不到.C3861

问题描述:

我有一个文件“HSlider.h”它使用“Draw.h”,在那里我定义了我的函数来使用它们。 但编译器说我没有定义他们(识别器未找到)。我搜索论坛寻找类似的错误,但它没有帮助。标识符找不到.C3861

我在VS 2015 Communty工作。

ERROR实施例: 错误C3861 DrawGUIBox:标识符没有找到 Try2 C:\用户\ LEL \文件\视觉工作室2015 \项目\ 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

+0

'#pragma once' +'#ifndef HDRAWFUNC_H' /'#define HDRAWFUNC_H' /'#endif'是多余的。 – Borgleader

+0

我无法在hslider.h中找到Try2文本 – 2017-06-05 11:20:54

+0

您的意思是字体?Try2是项目的名称.Font在DirectX.cpp中。 – bJing

我找到了答案我自己。 问题在于圆形包含。 它发生是因为我在头文件中定义了我的类而不是.cpp文件。 这样做并正确地移动标题我在几分钟内解决了它。

道德:永远不要破坏C++规则。

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

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

打开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文件丢失一个单独的问题,但我不能与帮助。)