#include <windows.h> // Windows的头文件
#include <glew.h> // 包含最新的gl.h,glu.h库
#include <glut.h> // 包含OpenGL实用库
#include <stdio.h>       // 标准输入/输出库的头文件
#include <glaux.h>       // GLaux库的头文件

HGLRC hRC = NULL; // 窗口着色描述表句柄
HDC hDC = NULL; // OpenGL渲染描述表句柄
HWND hWnd = NULL; // 保存我们的窗口句柄
HINSTANCE hInstance; // 保存程序的实例

bool keys[256]; // 保存键盘按键的数组
bool active = TRUE; // 窗口的活动标志,缺省为TRUE
bool fullscreen = TRUE; // 全屏标志缺省,缺省设定成全屏模式

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // WndProc的定义

GLfloat  xrot;        // X 旋转量
GLfloat  yrot;        // Y 旋转量
GLfloat  zrot;        // Z 旋转量

GLuint  texture[1];       // 存储一个纹理

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)
{
    // 防止被零除  
    if (height == 0)
    {
        height = 1;   // 将Height设为1         
    }
    // 重置当前的视口  
    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);// 选择投影矩阵  
    glLoadIdentity();// 重置投影矩阵  
    // 设置视口的大小  
    gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f);
    glMatrixMode(GL_MODELVIEW);// 选择模型观察矩阵  
    glLoadIdentity();// 重置模型观察矩阵  
}

AUX_RGBImageRec* LoadBMP(char* Filename)     // 载入位图图象
{
    FILE* File = NULL;       // 文件句柄
    if (!Filename)        // 确保文件名已提供
    {
        return NULL;       // 如果没提供,返回 NULL
    }
    File = fopen(Filename, "r");      // 尝试打开文件
    if (File)        // 文件存在么?
    {
        fclose(File);       // 关闭句柄
        return auxDIBImageLoad(Filename);    // 载入位图并返回指针
    }
    return NULL;        // 如果载入失败,返回 NULL
}
int LoadGLTextures()        // 载入位图(调用上面的代码)并转换成纹理
{
    int Status = FALSE;       // 状态指示器
    AUX_RGBImageRec* TextureImage[1];     // 创建纹理的存储空间
    memset(TextureImage, 0, sizeof(void*) * 1);    // 将指针设为 NULL
    // 载入位图,检查有无错误,如果位图没找到则退出
    if (TextureImage[0] = LoadBMP("bitmap1.bmp"))
    {
        Status = TRUE;       // 将 Status 设为 TRUE
        glGenTextures(1, &texture[0]);     // 创建纹理
        // 使用来自位图数据生成 的典型纹理
        glBindTexture(GL_TEXTURE_2D, texture[0]);
        // 生成纹理
        glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // 线形滤波
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 线形滤波
    }
    if (TextureImage[0])       // 纹理是否存在
    {
        if (TextureImage[0]->data)     // 纹理图像是否存在
        {
            free(TextureImage[0]->data);    // 释放纹理图像占用的内存
        }
        free(TextureImage[0]);      // 释放图像结构
    }
    return Status;        // 返回 Status
}

int InitGL(GLvoid)        // 此处开始对OpenGL进行所有设置
{
    if (!LoadGLTextures())       // 调用纹理载入子例程
    {
        return FALSE;       // 如果未能载入,返回FALSE
    }

glEnable(GL_TEXTURE_2D);      // 启用纹理映射
    glShadeModel(GL_SMOOTH);      // 启用阴影平滑
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);     // 黑色背景
    glClearDepth(1.0f);       // 设置深度缓存
    glEnable(GL_DEPTH_TEST);      // 启用深度测试
    glDepthFunc(GL_LEQUAL);       // 所作深度测试的类型
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);   // 真正精细的透视修正
    return TRUE;        // 初始化 OK
}

int DrawGLScene(GLvoid)        // 从这里开始进行所有的绘制
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);   // 清除屏幕和深度缓存
    glLoadIdentity();       // 重置当前的模型观察矩阵
    glTranslatef(0.0f, 0.0f, -5.0f);      // 移入屏幕 5 个单位

glRotatef(xrot, 1.0f, 0.0f, 0.0f);      // 绕X轴旋转
    glRotatef(yrot, 0.0f, 1.0f, 0.0f);      // 绕Y轴旋转
    glRotatef(zrot, 0.0f, 0.0f, 1.0f);      // 绕Z轴旋转

glBindTexture(GL_TEXTURE_2D, texture[0]);    // 选择纹理
    glBegin(GL_QUADS);
    // 前面
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // 纹理和四边形的左下
    glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f); // 纹理和四边形的右下
    glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 1.0f); // 纹理和四边形的右上
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // 纹理和四边形的左上
    // 后面
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 纹理和四边形的右下
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // 纹理和四边形的右上
    glTexCoord2f(0.0f, 1.0f); glVertex3f(1.0f, 1.0f, -1.0f); // 纹理和四边形的左上
    glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, -1.0f); // 纹理和四边形的左下
    // 顶面
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // 纹理和四边形的左上
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // 纹理和四边形的左下
    glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, 1.0f, 1.0f); // 纹理和四边形的右下
    glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, -1.0f); // 纹理和四边形的右上
    // 底面
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 纹理和四边形的右上
    glTexCoord2f(0.0f, 1.0f); glVertex3f(1.0f, -1.0f, -1.0f); // 纹理和四边形的左上
    glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f); // 纹理和四边形的左下
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // 纹理和四边形的右下
    // 右面
    glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, -1.0f); // 纹理和四边形的右下
    glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, -1.0f); // 纹理和四边形的右上
    glTexCoord2f(0.0f, 1.0f); glVertex3f(1.0f, 1.0f, 1.0f); // 纹理和四边形的左上
    glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f); // 纹理和四边形的左下
    // 左面
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 纹理和四边形的左下
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // 纹理和四边形的右下
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // 纹理和四边形的右上
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // 纹理和四边形的左上
    glEnd();

xrot += 0.015f;        // X 轴旋转
    yrot += 0.015f;        // Y 轴旋转
    zrot += 0.015f;        // Z 轴旋转
    return true;        // 继续运行
}

GLvoid KillGLWindow(GLvoid) {    // 正常销毁窗口
    if (fullscreen) {            // 我们处于全屏模式吗?
        ChangeDisplaySettings(NULL, 0);// 是的话,切换回桌面
        ShowCursor(TRUE); // 显示鼠标指针
    }
    if (hRC) {                    // 我们拥有OpenGL渲染描述表吗?
        if (!wglMakeCurrent(NULL, NULL)) {        // 我们能否释放DC和RC描述表?
            MessageBox(NULL, "释放DC或RC失败", "关闭错误", MB_OK | MB_ICONINFORMATION);
        }
        if (!wglDeleteContext(hRC)) {
            MessageBox(NULL, "释放RC失败。", "关闭错误", MB_OK | MB_ICONINFORMATION);
        }
        hRC = NULL;
    }
    if (hDC && !ReleaseDC(hWnd, hDC)) // 我们能否释放 DC?
    {
        MessageBox(NULL, "释放DC失败。", "关闭错误", MB_OK | MB_ICONINFORMATION);
        hDC = NULL; // 将 DC 设为 NULL
    }
    if (hWnd && !DestroyWindow(hWnd)) // 能否销毁窗口?
    {
        MessageBox(NULL, "释放窗口句柄失败。", "关闭错误", MB_OK |
            MB_ICONINFORMATION);
        hWnd = NULL; // 将 hWnd 设为 NULL
    }
    if (!UnregisterClass("OpenG", hInstance)) // 能否注销类?
    {
        MessageBox(NULL, "不能注销窗口类。", "关闭错误", MB_OK | MB_ICONINFORMATION);
        hInstance = NULL; // 将 hInstance 设为 NULL
    }
}

// 创建OpenGL窗口
BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag) {
    GLuint PixelFormat; // 保存查找匹配的结果
    WNDCLASS wc;        // 窗口类结构

DWORD dwExStyle;// 扩展窗口风格
    DWORD dwStyle; // 窗口风格

RECT WindowRect; // 取得矩形的左上角和右下角的坐标值
    WindowRect.left = (long)0; // 将Left 设为 0
    WindowRect.right = (long)width; // 将Right 设为要求的宽度
    WindowRect.top = (long)0; // 将Top 设为 0
    WindowRect.bottom = (long)height; // 将Bottom 设为要求的高度

fullscreen = fullscreenflag;

hInstance = GetModuleHandle(NULL);    //取得窗口实例
    wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;    //移动时重画并取得窗口DC
    wc.lpfnWndProc = (WNDPROC)WndProc; // WndProc处理消息
    wc.cbClsExtra = 0; // 无额外窗口数据
    wc.cbWndExtra = 0; // 无额外窗口数据
    wc.hInstance = hInstance; // 设置实例
    wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); // 装入缺省图标
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 装入鼠标指针
    wc.hbrBackground = NULL; // GL不需要背景
    wc.lpszMenuName = NULL; // 不需要菜单
    wc.lpszClassName = "OpenG"; // 设定类名字

if (!RegisterClass(&wc)) // 尝试注册窗口类
    {
        MessageBox(NULL, "注册窗口失败", "错误", MB_OK | MB_ICONEXCLAMATION);
        return FALSE; // 退出并返回FALSE
    }
    if (fullscreen) // 要尝试全屏模式吗?
    {
        DEVMODE dmScreenSettings; // 设备模式
        memset(&dmScreenSettings, 0, sizeof(dmScreenSettings)); // 确保内存清空为零
        dmScreenSettings.dmSize = sizeof(dmScreenSettings); // Devmode 结构的大小
        dmScreenSettings.dmPelsWidth = width; // 所选屏幕宽度
        dmScreenSettings.dmPelsHeight = height; // 所选屏幕高度
        dmScreenSettings.dmBitsPerPel = bits; // 每象素所选的色彩深度
        dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;

// 尝试设置显示模式并返回结果。注: CDS_FULLSCREEN 移去了状态条。
        if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
        {
            // 若模式失败,提供两个选项:退出或在窗口内运行。
            if (MessageBox(NULL, "全屏模式在当前显卡上设置失败!\n使用窗口模式?", "NeHe G",
                MB_YESNO | MB_ICONEXCLAMATION) == IDYES)
            {
                fullscreen = FALSE; // 选择窗口模式(Fullscreen=FALSE)
            }
            else
            {
                // 弹出一个对话框,告诉用户程序结束
                MessageBox(NULL, "程序将被关闭", "错误", MB_OK | MB_ICONSTOP);
                return FALSE; // 退出并返回 FALSE
            }
        }
    }
    if (fullscreen) // 仍处于全屏模式吗?
    {
        dwExStyle = WS_EX_APPWINDOW; // 扩展窗体风格
        dwStyle = WS_POPUP; // 窗体风格
        ShowCursor(FALSE); // 隐藏鼠标指针
    }
    else
    {
        dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; // 扩展窗体风格
        dwStyle = WS_OVERLAPPEDWINDOW; // 窗体风格
    }
    AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle); // 调整窗口达到真正要求大小
    if (!(hWnd = CreateWindowEx(dwExStyle, // 扩展窗体风格
        "OpenG", // 类名字
        (LPTSTR)title, // 窗口标题
        WS_CLIPSIBLINGS | // 必须的窗体风格属性
        WS_CLIPCHILDREN | // 必须的窗体风格属性
        dwStyle, // 选择的窗体属性
        0, 0, // 窗口位置
        WindowRect.right - WindowRect.left, // 计算调整好的窗口宽度
        WindowRect.bottom - WindowRect.top, // 计算调整好的窗口高度
        NULL, // 无父窗口
        NULL, // 无菜单
        hInstance, // 实例
        NULL))) // 不向WM_CREATE传递任何东东
    {
        KillGLWindow(); // 重置显示区
        MessageBox(NULL, "不能创建一个窗口设备描述表", "错误", MB_OK |
            MB_ICONEXCLAMATION);
        return FALSE; // 返回 FALSE
    }

static PIXELFORMATDESCRIPTOR pfd = // /pfd 告诉窗口我们所希望的东        东,即窗口使用的像素格式
    {
        sizeof(PIXELFORMATDESCRIPTOR), // 上述格式描述符的大小
        1, // 版本号
        PFD_DRAW_TO_WINDOW | // 格式支持窗口
        PFD_SUPPORT_OPENGL | // 格式必须支持OpenGL
        PFD_DOUBLEBUFFER, // 必须支持双缓冲
        PFD_TYPE_RGBA, // 申请 RGBA 格式
        bits,         // 选定色彩深度
        0, 0, 0, 0, 0, 0, // 忽略的色彩位
        0, // 无Alpha缓存
        0, // 忽略Shift Bit
        0, // 无累加缓存
        0, 0, 0, 0, // 忽略聚集位
        16, // 16位 Z-缓存 (深度缓存)
        0, // 无蒙板缓存
        0, // 无辅助缓存
        PFD_MAIN_PLANE, // 主绘图层
        0, // Reserved
        0, 0, 0 // 忽略层遮罩
    };
    if (!(hDC = GetDC(hWnd))) // 取得设备描述表了么?
    {
        KillGLWindow(); // 重置显示区
        MessageBox(NULL, "不能创建一种相匹配的像素格式", "错误", MB_OK |
            MB_ICONEXCLAMATION);
        return FALSE; // 返回 FALSE
    }
    if (!(PixelFormat = ChoosePixelFormat(hDC, &pfd))) // Windows 找到相应的象素格式了
    {
        KillGLWindow(); // 重置显示区
        MessageBox(NULL, "不能设置像素格式", "错误", MB_OK | MB_ICONEXCLAMATION);
        return FALSE; // 返回 FALSE
    }
    if (!(PixelFormat = ChoosePixelFormat(hDC, &pfd))) // Windows 找到相应的象素格式了吗 ?
    {
        KillGLWindow(); // 重置显示区
        MessageBox(NULL, "不能设置像素格式", "错误", MB_OK | MB_ICONEXCLAMATION);
        return FALSE; // 返回 FALSE
    }
    if (!SetPixelFormat(hDC, PixelFormat, &pfd)) // 能够设置象素格式么?
    {
        KillGLWindow(); // 重置显示区
        MessageBox(NULL, "不能设置像素格式", "错误", MB_OK | MB_ICONEXCLAMATION);
        return FALSE; // 返回 FALSE
    }
    if (!(hRC = wglCreateContext(hDC))) // 能否取得着色描述表?
    {
        KillGLWindow(); // 重置显示区
        MessageBox(NULL, "不能创建OpenGL渲染描述表", "错误", MB_OK |
            MB_ICONEXCLAMATION);
        return FALSE; // 返回 FALSE
    }
    if (!wglMakeCurrent(hDC, hRC)) // 尝试激活着色描述表
    {
        KillGLWindow(); // 重置显示区
        MessageBox(NULL, "不能激活当前的OpenGL渲然描述表", "错误", MB_OK |
            MB_ICONEXCLAMATION);
        return FALSE; // 返回 FALSE
    }
    ShowWindow(hWnd, SW_SHOW); // 显示窗口
    SetForegroundWindow(hWnd); // 略略提高优先级
    SetFocus(hWnd); // 设置键盘的焦点至此窗口
    ReSizeGLScene(width, height); // 设置透视 GL 屏幕

if (!InitGL()) // 初始化新建的GL窗口
    {
        KillGLWindow(); // 重置显示区
        MessageBox(NULL, "Initialization Failed.", "ERROR", MB_OK | MB_ICONEXCLAMATION);
        return FALSE; // 返回 FALSE
    }
    return TRUE; // 成功
}

LRESULT CALLBACK WndProc(HWND hWnd, // 窗口的句柄
    UINT uMsg, // 窗口的消息
    WPARAM wParam, // 附加的消息内容
    LPARAM lParam) // 附加的消息内容
{
    switch (uMsg) // 检查Windows消息
    {
    case WM_ACTIVATE: // 监视窗口激活消息
    {
        if (!HIWORD(wParam)) // 检查最小化状态
        {
            active = TRUE; // 程序处于激活状态
        }
        else
        {
            active = FALSE; // 程序不再激活
        }
        return 0; // 返回消息循环
    }
    case WM_SYSCOMMAND: // 系统中断命令
    {
        switch (wParam) // 检查系统调用
        {
        case SC_SCREENSAVE: // 屏保要运行?
        case SC_MONITORPOWER: // 显示器要进入节电模式?
            return 0; // 阻止发生
        }
        break; // 退出
    }
    case WM_CLOSE: // 收到Close消息?
    {
        PostQuitMessage(0); // 发出退出消息
        return 0; // 返回
    }
    case WM_KEYDOWN: // 有键按下么?
    {
        keys[wParam] = TRUE; // 如果是,设为TRUE
        return 0; // 返回
    }
    case WM_KEYUP: // 有键放开么?
    {
        keys[wParam] = FALSE; // 如果是,设为FALSE
        return 0; // 返回
    }
    case WM_SIZE: // 调整OpenGL窗口大小
    {
        ReSizeGLScene(LOWORD(lParam), HIWORD(lParam)); // LoWord=Width,HiWord = Height
        return 0; // 返回
    }
    }
    // 向 DefWindowProc传递所有未处理的消息。
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, // 当前窗口实例
    HINSTANCE hPrevInstance, // 前一个窗口实例
    LPSTR lpCmdLine, // 命令行参数
    int nCmdShow) // 窗口显示状态
{
    MSG msg; // Windowsx消息结构
    BOOL done = FALSE; // 用来退出循环的Bool 变量

// 提示用户选择运行模式
    if (MessageBox(NULL, "你想在全屏模式下运行么?", "设置全屏模式", MB_YESNO |
        MB_ICONQUESTION) == IDNO)
    {
        fullscreen = FALSE; // FALSE为窗口模式
    }
    // 创建OpenGL窗口
    if (!CreateGLWindow((char*)"NeHe's OpenGL程序框架", 640, 480, 16, fullscreen))
    {
        return 0; // 失败退出
    }
    while (!done) // 保持循环直到 done=TRUE
    {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) // 有消息在等待吗?
        {
            if (msg.message == WM_QUIT) // 收到退出消息?
            {
                done = TRUE; // 是,则done=TRUE
            }
            else // 不是,处理窗口消息
            {
                TranslateMessage(&msg); // 翻译消息
                DispatchMessage(&msg); // 发送消息
            }
        }
        else // 如果没有消息
        {
            // 绘制场景。监视ESC键和来自DrawGLScene()的退出消息
            if (active) // 程序激活的么?
            {
                if (keys[VK_ESCAPE]) // ESC 按下了么?
                {
                    done = TRUE; // ESC 发出退出信号
                }
                else // 不是退出的时候,刷新屏幕
                {
                    DrawGLScene(); // 绘制场景
                    SwapBuffers(hDC); // 交换缓存 (双缓存)
                }
            }
            if (keys[VK_F1]) // F1键按下了么?
            {
                keys[VK_F1] = FALSE; // 若是,使对应的Key数组中的值为 FALSE
                KillGLWindow(); // 销毁当前的窗口
                fullscreen = !fullscreen; // 切换 全屏 / 窗口 模式
                // 重建 OpenGL 窗
                if (!CreateGLWindow((char*)"NeHe's OpenGL 程序框架", 640, 480, 16, fullscreen))
                {
                    return 0; // 如果窗口未能创建,程序退出
                }
            }
        }
    }
    // 关闭程序
    KillGLWindow(); // 销毁窗口
    return (msg.wParam); // 退出程序 
}

LNK1120 1 个无法解析的外部命令 Nehe OpenGL第六课vs2019环境下 调式后出现无法解析外部符号错误 求解?相关推荐

  1. VS报错: fatal error LNK1120: 1 个无法解析的外部命令

    1. 问题描述 报错: fatal error LNK1120: 1 个无法解析的外部命令 我一开始还以为是链接器的错误,搜索尝试无果后在想哪里出错了. 后来想起来,当时在源文件中新建cpp文件时,起 ...

  2. fatal error LNK1120: 1个无法解析的外部命令

    C++编译时,VS2019出现fatal error LNK1120: 1个无法解析的外部命令错误,查了很多资料,网上说的解决方案如缺少库文件.工程配置等都不行! 原来是自己分文件编写时,用了类模板 ...

  3. C++初学者遇到的LNK1120无法解析的外部命令部分可能原因

    C++初学者遇到的LNK1120无法解析的外部命令部分可能原因 0.最常见的原因是编译器找不到函数的实现部分,即函数有声明了,编译器却找不到定义,以下是几种常见情况. 1.没写main函数 2.inl ...

  4. error LNK1120: 2个无法解析的外部命令:vtkRenderingOpenGL_AutoInit(Construct、Destruct),该函数在......中被引用

    进行PCL最小包围盒计算时,使用了https://blog.csdn.net/WillWinston/article/details/80196895 里的程序. 在pcl1.8.0+vs2013+w ...

  5. LNK1120/2001 无法解析的外部命令

    源代码: #include <iostream> #include <string> using namespace std;class client { private:st ...

  6. VS中无法解析的外部命令的解决办法

    VS中无法解析的外部命令的解决办法 报错LNK2005外部符号 报错LNK2019外部符号 报错LNK1120外部符号 解决办法1: 检查自己报错的代码里,是否有类里声明的函数没有对应的实现.比如在p ...

  7. fatal error lnk1120: 1 个无法解析的外部命令_3月1日七牛云存储割韭菜的应对方法...

    前言 早上起来看邮件,看到一封被七牛云割韭菜的公告: 内心冰冰凉,不过大家都要吃饭的嘛总不能一直免费下去.所以来研究一下对于我们这种穷人应该如何应对. 一.七牛CDN加速流程 主要流程分析 1.用户通 ...

  8. LNK1120: 一个无法解析的外部命令

    出现这种问题的原因有可能: 1.当在一个头文件中定义一个函数,但是在源文件中没有实现的时候 2.当使用一个外部库的对应的头文件中使用函数的时候 第一种情况的解决办法: 无!!!!! 第二种情况,肯定是 ...

  9. LNK2001:无法解析的外部符号,LNK1120:一个无法解析的外部命令

    写了个画图程序,边写边调试,运行时发现出现了这个.检查发现原因是在头文件定义了A函数,在.cpp中没有实现,于是在.cpp中将函数写出来 头文件定义了,但函数没有具体出现,编译器无法解析,实现一下函数 ...

最新文章

  1. 拥有2000家门店,他如何晋升为服装界的新宠?
  2. 微生物相关网络构建教程中文Microbial association network construction tutorial
  3. .net开发框架比较
  4. Linux系统之时间管理
  5. 自动生成get,set方法
  6. 八周二次课 rsync工具介绍,常用参数选项以及和ssh同步
  7. 【Python】远离 Python 最差实践,避免挖坑
  8. 详述白盒测试的逻辑覆盖的条件覆盖及其优缺点
  9. Python自动化测试-正则表达式解析
  10. find命令过滤 no such_Linux中find命令的用法入门
  11. 默认参数和命名关键字参数(1)
  12. 截取 %# Eval(val) %中的字符
  13. android dp sp px_你真的了解android的屏幕适配吗?
  14. SQL数据库面试题以及答案(50题)
  15. 虚幻引擎5-显示中文字体的实现方法
  16. 递归函数php啥意思,php递归函数如何用才有效?php递归函数例子
  17. 3dmax 注意事项
  18. 【Panoramic stitching】并查集(disjoint set)结构及源码
  19. 基于net-snmp的代理端及管理端开发手册
  20. vue项目中加载使用腾讯地图

热门文章

  1. 在电脑上哪儿看提高收视率_电视上收视率最高的电影的网上搜集完整指南
  2. 拍拍贷用户及还款数据分析案例
  3. 如何利用电位器控制舵机
  4. MD5中使用16进制
  5. Window服务器新手建站图文教程
  6. html div将页面划分,css+div网页布局
  7. 3DES加密算法原理及实现过程
  8. ssas脚本组织程序_SSAS 使用手册.doc
  9. 明星项目ALGO沦为散户收割机:5天跌去60%,私募却获48倍回报
  10. 酒店直播服务器系统,用ffmpeg+nginx服务器实现类似酒店视频直播系统