引用其他头文件时出现这种错误,莫名其妙,error C2065: “ColorMatrix”: 未声明的标识符
今天做项目时,直接拷贝了另一个工程里的头文件和源文件,然后运行时就出现这种问题,莫名其妙,在原程序里运行一点问题就没有,但是在新工程里就是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 error C2065: “IDC_LISTBOX”: 未声明的标识符
错误的可能原因及解决方法如下:1.出错文件中没有包含资源文件ID声明的resource.h文件.在出错文件中加入#include “resource.h”语句. 2.工程附件包含目录的路径下没有res ...
- error C2065:未声明的标识符错误
原文地址:http://blog.sina.com.cn/s/blog_8216ada701017evx.html 在VS2010下进行VC++调试时,出现这样一种错误:error C2065:未声明 ...
- VC++编译错误error C2065: “HANDLE”: 未声明的标识符及添加winbase.h后提示winbase.h(243): error C2146: 语法错误: 缺少“;”(在标识符“Internal”的前面)的解决办法
问题描述: VC++程序编译时提示错误:error C2065: “HANDLE”: 未声明的标识符等众多错误提示,如下所示: error C2065: “HANDLE”: 未声明的标识符 error ...
- Failed: error processing document #281: unexpected EOF,往MongoDB当中插入json文件时出现的错误。
往MongoDB当中插入json文件时提示的错误(我的操作系统是win10): 当时的执行命令是:mongoimport -d test -c restaurants d://primer-datas ...
- 用javah 导出类的头文件, 常见的错误及正确的使用方法
******************************************************************************** 用javah 导出类的头文件, 常见的 ...
- 做MFC的时候引用了头文件但VC还是报missing storage-class or type specifiers
我在客户端clg.h头文件中引用了头文件“ClientSocket.h”,然后在客户端clg.h中的类中声明了类CClientSocket的对象,可是编译报错:d:\vc++\客户端\客户端dlg.h ...
- C++包含头文件时尖括号和双引号区别
原文链接:http://c.biancheng.net/cpp/biancheng/view/66.html 如果你还看一些别的C++教程,那么你可能很早就发现了,有些书上的#include命令写作# ...
- C/C++ 引入头文件时 #include<***.h> 与 #include"***.h" 区别
两种情况区分: 1.#include <> 编译器只会去系统文件目录中查找,找不到就报错. 2.#include " " 编译器会先在用户目录中查找,再到编译器设定的 ...
- 在c++中引用c头文件里的函数
在c++中有的时候想要引用c头文件里的函数有两种方法;就拿c语言里面的<stdlib.h>举例 在c中我们想要用<stdlib.h>里的函数,形式为:#include<s ...
随机推荐
- 【extjs6学习笔记】1.12 初始: Working with DOM
http://www.extjs-tutorial.com/extjs/working-with-dom Ext JS是一个DHTML库. 它通过使用JavaScript创建或操作DOM元素来创建UI ...
- python之__init__使用方法
定义类的时候,若是添加__init__方法,那么在创建类的实例的时候,实例会自动调用这个方法,一般用来对实例的属性进行初使化.比如:class testClass: def __init__(self ...
- java cpu使用率高异常排查
1.top命令对cpu进行排序shift+p 2.pwdx pid查找业务进程路径 3.top -Hp pid查看相关负载线程pid 4.printf “0x%x\n” 线程pid // 将线 ...
- Python开发第四篇
文件操作 一.文件基本操作 打开文件方法:open f = open("test",encoding="") r:只读模式(只能读取文件,不能做写操作,文件不存 ...
- NYOJ-198-数数
原题地址 数数 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 我们平时数数都是喜欢从左向右数的,但是我们的小白同学最近听说德国人数数和我们有些不同,他们正好和我们相 ...
- hdu-2112 HDU Today---dijkstra+标号
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2112. 题目大意: 求起点到终点的最短路 解题思路: 对地名进行编号即可 然后直接dijkstra算 ...
- 【BZOJ1216】[HNOI2003] 操作系统(堆+模拟)
点此看题面 大致题意: 有\(n\)个任务,每个任务有4个属性:编号.到达时间.执行时间和优先级.每个单位时间,会执行一个优先级最高(若有多个优先级最高的,就先执行到达时间较早的)的任务,请你按完成的 ...
- Flutter /bin/sh: /packages/flutter_tools/bin/xcode_backend.sh: No such file or directory
自己写项目中遇到的一个问题, 可以出来是路径找不到,应该是FLUTTER_ROOT这个全局变量没有取到值的原因 1.检查xcode_backend.sh 是否真的存在 2.网上说的:Target -& ...
- C# 运用FileInfo类创建、删除文件
通过FileInfo类,我们可以方便地创建出文件,并可以访问文件的属性同时还可以对文件进行打开文件.关闭文件.读写文件等基本的操作.下面的代码显示了如何创建一个文本文件并且去访问其创建时间.文件的绝对 ...
- 短短几行css代码实现滚动条效果
如何实现使用css实现滚动条效果 实现效果,运用线性渐变来实现功能 假设我们的页面被包裹在 <body> 中,可以滚动的是整个 body,给它添加这样一个从左下到到右上角的线性渐变: bo ...