• 编程过程中遇到的“编译链接”类错误或警告积累


    头文件包含错误

      将《Windows程序设计(第5班)珍藏版》第40页的“HELLOWI N.C”程序在VC++6.0中运行,出现如下运行错误:

    error LNK2001: unresolved external symbol __imp__PlaySoundA@12

    在CSDN论坛与错误相同标题的帖子#2找到答案,但是,将如下头文件包含进程序后

    #include <mmsystem.h>   
    #pragma comment(lib, "winmm.lib") 

    又出现如下编译错误:

    error C2146: syntax error : missing ';' before identifier 'MMVERSION'
    fatal error C1004: unexpected end of file found

    这时想起《Windows程序设计》30页的关于包含头文件的一段话:

    “如果TCHAR已经在某个头文件中被定义了,WINNT.H和WCHAR.H头文件都能防止TCHAR数据类型被重复定义。不管怎样,无论何时你在你的程序中使用其它头文件时,都应在所有其它头文件之前先包含WINDOWS.H头文件”,至此,将头文件

    #include <windows.h>

    放在程序最顶部,问题解决。

      在查找相关章节的过程中,解决了关于“怎样判断程序是否定义了Unicode标识符”一个疑问,在《Windows程序设计》30页,指出“WINNT.H则负责处理基本的Unicode支持的功能”,后面几段文章也做了讨论。

    ________________________________________________________________________________

    于swetch case相关变量声明位置错误及size_t的一次误用

      将《Windows程序设计》第40代码的回调函数对WM_PAINT的处理中加入如下代码:

    GetClientRect(hwnd,&rect);
    for( x = 0; x < rect.right; x+=100)
    {
        MoveToEx(hdc,x,0,NULL);
        LineTo(hdc,x,rect.bottom);
    }

    旨在客户区绘制一些竖线,首先代码中x是没有被定义的,这个一眼可以看出,错误也常见,如下:

    error C2065: 'x' : undeclared identifier

    那直接在for循环中x的前面加上int是不是可以呢,运行一下,错误如下:

    error C2360: initialization of 'x' is skipped by 'case' label

    在百度知道找到答案:在case里面不能直接定义变量

    剩下的工作不难做,在回调函数首部定义x即可,同时也测试了一下使用size_t来定义x的情况,出现如下警告;

    warning C4018: '<' : signed/unsigned mismatch

    在《C++ Primer》中讲解了size_t相对于int的一些优势,但这些优势只是在二者可以通用的使用相对而言的,并不是说size_t任何时候都可以替代int,本质上讲它们用来定义不同的类型,这次运行中的警告就是一个例子。

      严格意义上讲,x的定义应该用long才准确,因为RECT的结构如下:

    typedef struct _RECT {
      LONG left;
      LONG top;
      LONG right;
      LONG bottom;
    } RECT, *PRECT;

    ______________________________________________________________________________

    多线程Debug阶段 的编译错误 

      VC多线程编程时,在include process.h的情况下,还会出error C2065: '_beginthread' : undeclared identifier,这样的error信息。主要是配置文件的问题。

      对这个问题的原理,《Windows程序设计》931页做了具体讲解

    ____________________________________________________________________________

    备注:最好找一本关于编译链接类错误的书,会省去不少时间,C++八大金刚中貌似有一本,书名待查。

  • 相关阅读:
    Spring框架之 我对AOP的理解
    第二次分班考试之 ---纠错19/25题
    Spring IOC(控制反转) 和DI
    一级缓存,二级缓存
    多对多连接
    MyBatis 智能标签
    小结javaScriptOOP的对象内容点
    15年错题小结2月
    《Java周边》Http请求模拟工具(postman)
    《Java周边》IDEA 设置快捷键和快捷键中英文对照
  • 原文地址:https://www.cnblogs.com/tingshuixuan2012/p/3124178.html
Copyright © 2020-2023  润新知