今天做项目时,直接拷贝了另一个工程里的头文件和源文件,然后运行时就出现这种问题,莫名其妙,在原程序里运行一点问题就没有,但是在新工程里就是error。

 >e:\c++\button_fly2\button_fly2\gdipbutton.cpp(): error C2065: “ColorMatrix”: 未声明的标识符
>e:\c++\button_fly2\button_fly2\gdipbutton.cpp(): error C2146: 语法错误: 缺少“;”(在标识符“HotMat”的前面)
>e:\c++\button_fly2\button_fly2\gdipbutton.cpp(): error C2065: “HotMat”: 未声明的标识符
>e:\c++\button_fly2\button_fly2\gdipbutton.cpp(): error C2059: 语法错误:“{”
>e:\c++\button_fly2\button_fly2\gdipbutton.cpp(): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
>e:\c++\button_fly2\button_fly2\gdipbutton.cpp(): error C2143: 语法错误 : 缺少“;”(在“}”的前面)
>e:\c++\button_fly2\button_fly2\gdipbutton.cpp(): error C2065: “ImageAttributes”: 未声明的标识符
>e:\c++\button_fly2\button_fly2\gdipbutton.cpp(): error C2146: 语法错误: 缺少“;”(在标识符“ia”的前面)
>e:\c++\button_fly2\button_fly2\gdipbutton.cpp(): error C2065: “ia”: 未声明的标识符

  同一台机器出现了这样的错误,真是让人费解,然后检查配置环境,结果是两个工程项目属性是一样的,然后检查头文件引用吧,只能一个一个看了,看来半天才发现原来是#include "stdafx.h"的问题,在这里面包含的有其他头文件,所以运行时老是报错。我的程序里添加的有几行代码如下:

#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;

  原来是使用了gdi的头文件,这是windows的api,可以预编译,提高速度。

  这里介绍一下stdafx.h是指编译器头文件预编译,所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。

  预编译文件的作用是把工程中的一部分代码提前编译好放在一个.pch文件中,以后在编译其他文件时,如果包含了这个头文件,编译器会首先读取这个.pch文件的内容,从而跳过该头文件的编译,节约了工程的编译时间,而*.pch文件一般是非常的大,因此在工程编译成功后,你可以考虑删除它。

  编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。如下是stdafx中常包含的头文件,都是windows的一些核心组件

 #include <afxwin.h>         // MFC 核心组件和标准组件
#include <afxext.h> // MFC 扩展 #include <afxdisp.h> // MFC 自动化类 #ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT #include <afxcontrolbars.h> // 功能区和控件条的 MFC 支持

  这些组件在第一次编译后就不会在编译,而是直接引用。

  总结起来一句话:

  虽然说stdafx文件我们不常修改,但是如果你引用别人的头文件,就需要注意了,检查一下是否和其他地方耦合,而容易忽略的就是这个头文件,所以务必检查一下这个头文件是否有额外添加的代码。确保程序能运行起来。

引用其他头文件时出现这种错误,莫名其妙,error C2065: “ColorMatrix”: 未声明的标识符的更多相关文章

  1. 错误 1 error C2065: “IDC_LISTBOX”: 未声明的标识符

    错误的可能原因及解决方法如下:1.出错文件中没有包含资源文件ID声明的resource.h文件.在出错文件中加入#include “resource.h”语句. 2.工程附件包含目录的路径下没有res ...

  2. error C2065:未声明的标识符错误

    原文地址:http://blog.sina.com.cn/s/blog_8216ada701017evx.html 在VS2010下进行VC++调试时,出现这样一种错误:error C2065:未声明 ...

  3. VC++编译错误error C2065: “HANDLE”: 未声明的标识符及添加winbase.h后提示winbase.h(243): error C2146: 语法错误: 缺少“;”(在标识符“Internal”的前面)的解决办法

    问题描述: VC++程序编译时提示错误:error C2065: “HANDLE”: 未声明的标识符等众多错误提示,如下所示: error C2065: “HANDLE”: 未声明的标识符 error ...

  4. Failed: error processing document #281: unexpected EOF,往MongoDB当中插入json文件时出现的错误。

    往MongoDB当中插入json文件时提示的错误(我的操作系统是win10): 当时的执行命令是:mongoimport -d test -c restaurants d://primer-datas ...

  5. 用javah 导出类的头文件, 常见的错误及正确的使用方法

    ******************************************************************************** 用javah 导出类的头文件, 常见的 ...

  6. 做MFC的时候引用了头文件但VC还是报missing storage-class or type specifiers

    我在客户端clg.h头文件中引用了头文件“ClientSocket.h”,然后在客户端clg.h中的类中声明了类CClientSocket的对象,可是编译报错:d:\vc++\客户端\客户端dlg.h ...

  7. C++包含头文件时尖括号和双引号区别

    原文链接:http://c.biancheng.net/cpp/biancheng/view/66.html 如果你还看一些别的C++教程,那么你可能很早就发现了,有些书上的#include命令写作# ...

  8. C/C++ 引入头文件时 #include<***.h> 与 #include"***.h" 区别

    两种情况区分: 1.#include <> 编译器只会去系统文件目录中查找,找不到就报错. 2.#include " "  编译器会先在用户目录中查找,再到编译器设定的 ...

  9. 在c++中引用c头文件里的函数

    在c++中有的时候想要引用c头文件里的函数有两种方法;就拿c语言里面的<stdlib.h>举例 在c中我们想要用<stdlib.h>里的函数,形式为:#include<s ...

随机推荐

  1. ArcSDE空间数据库中SDE用户使用探讨 (转载)

    ArcSDE作为空间数据库解决方案,应用非常广泛,本短文将尝试描述SDE的工作机制,简要说明空间数据库中SDE用户的使用方法.ArcSDE如何工作ArcSDE属于中间件技术,其本身并不能够存储空间数据 ...

  2. SpringBoot的异步调用介绍

    参考博客: https://www.cnblogs.com/jebysun/p/9675345.html https://blog.csdn.net/weixin_38399962/article/d ...

  3. 报错:Program bash is not found in PATH

    (如果按照我的方法来的话是没有这个错误的,我之前用别的方法的时候有但是后来还是没解决,写出来放到这里做参考吧) 参考原文:http://blog.csdn.net/fuyongbing1986/art ...

  4. 【MFC】获取文件大小的方法

    [转载]原文地址:http://blog.csdn.net/coderwu/article/details/5652056 MFC 下可以通过 CFileStatus 获取文件大小. ULONGLON ...

  5. django ORM 简单示例简绍

    简单 models 操作 class Host(models.Model): nid = models.AutoField(primary_key=True) #Nid为主键 hostname = m ...

  6. python 实例方法,类方法,静态方法

    实例方法 class Human(object): def __init__(self, weight): self.weight = weight def get_weight(self): ret ...

  7. CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第六节

    原文链接 第六节:全局内存和CUDA RPOFILER  Rob Farber 是西北太平洋国家实验室(Pacific Northwest National Laboratory)的高级科研人员.他在 ...

  8. highcharts与ajax的应用

    整理一份完整的例子,以供参考: <1>页面chart.html: <span style="font-size:14px;"><!DOCTYPE HT ...

  9. vue实现tab切换功能精简版

    <template> <div> <p class="tabs" v-for="(list,index) in lists" :c ...

  10. WordPress免费清新响应式博客/杂志/图片三合一主题Nana

    WordPress免费清新响应式博客/杂志/图片三合一主题Nana 一.主题安装须知 1.本主题必须安装文章点击统计插件:WP-PostViews,可以直接在后台插件→安装插件中直接搜索安装官方最新版 ...