关于MFC下使用MTL库编译错误的问题
2011-03-12 15:20
429 查看
在使用Matrix Template Library(MTL)库进行矩阵运算还是很给力的,但是遇到了一个比较悲剧的问题就是,在控制台程序中一切完美,而在MFC下使用该库会编译不过去,(编译环境VS2005SP1,VS2008下貌似没有这个问题)。
在MFC下编译,提示下面错误
[/code]
提示错误的代码如下:
[/code]
究其原因,max和min在windows的头文件中已经被定义为宏了,所以mtl中这两个函数和已经定义的发生了冲突,找到原因,修改应该就知道怎么修改了,第一,将max和min两个函数名称换掉,但是这个工程量貌似比较大,需要将mtl库中所有用到max和min的都换掉;第二,使用宏将其定义取消掉,代码如下:
[/code]
将上面的代码加到stdafx.h中,就可以解决这个问题了,这样做的确比较简单,目前还不清楚有没有其他的副作用,如果有,请大家告诉我,谢谢。
在MFC下编译,提示下面错误
[code] 1>------ 已启动生成: 项目: TestUI, 配置: Debug Win32 ------
1>正在编译...
1>stdafx.cpp
1>正在编译...
1>TestUI.cpp
1>TestUIDlg.cpp
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl_decl.h(45) : warning C4003: “max”宏的实参不足
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl_decl.h(45) : error C2027: 使用了未定义类型“VectorT”
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl_decl.h(45) : error C2226: 语法错误 : 意外的“VectorT”类型
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl_decl.h(45) : error C2988: 不可识别的模板声明/定义
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl_decl.h(45) : error C2059: 语法错误 : “)”
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl_decl.h(45) : error C2059: 语法错误 : “)”
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl_decl.h(48) : error C2653: “VectorT”: 不是类或命名空间名称
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl_decl.h(49) : warning C4003: “min”宏的实参不足
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl_decl.h(49) : error C2988: 不可识别的模板声明/定义
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl_decl.h(49) : error C2059: 语法错误 : “)”
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl_decl.h(49) : error C2059: 语法错误 : “)”
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(739) : warning C4003: “max”宏的实参不足
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(739) : error C2027: 使用了未定义类型“VectorT”
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(739) : error C2226: 语法错误 : 意外的“VectorT”类型
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(739) : error C2988: 不可识别的模板声明/定义
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(739) : error C2059: 语法错误 : “)”
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(739) : error C2059: 语法错误 : “)”
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(753) : error C2653: “VectorT”: 不是类或命名空间名称
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(754) : warning C4003: “min”宏的实参不足
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(754) : error C2988: 不可识别的模板声明/定义
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(754) : error C2059: 语法错误 : “)”
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(754) : error C2059: 语法错误 : “)”
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(755) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(755) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>c:/work/3rdpart/mtl-2.1.2-22/mtl/mtl.h(1295) : warning C4003: “min”宏的实参不足
1>正在生成代码...
1>生成日志保存在“file://c:/Work/LT_Image/ImD/TestUI/BuildLog.htm”
1>TestUI - 20 个错误,5 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
[/code]
提示错误的代码如下:
[code]template <class VectorT>
inline typename VectorT::value_type
max(const VectorT& x);
template <class VectorT>
inline typename VectorT::value_type
min(const VectorT& x);
[/code]
究其原因,max和min在windows的头文件中已经被定义为宏了,所以mtl中这两个函数和已经定义的发生了冲突,找到原因,修改应该就知道怎么修改了,第一,将max和min两个函数名称换掉,但是这个工程量貌似比较大,需要将mtl库中所有用到max和min的都换掉;第二,使用宏将其定义取消掉,代码如下:
[code] namespace mtl
{
#ifdef max
#undef max
#endif
#ifdef min
#undef min
#endif
}
[/code]
将上面的代码加到stdafx.h中,就可以解决这个问题了,这样做的确比较简单,目前还不清楚有没有其他的副作用,如果有,请大家告诉我,谢谢。
相关文章推荐
- 关于MFC下使用MTL库编译错误的问题
- 关于wince 使用占用空间大的内存变量问题(编译无错误但是无法运行的问题)
- 关于使用cocoapods管理第三方库,编译错误的问题
- 关于vs使用winddk开发包编译错误问题
- 关于stl中transfrom使用时编译错误问题
- 关于Visual 2005中MFC调用Berkeley DB的编译错误问题
- 关于编译Android4.2是出现GCC错误的问题
- 关于引入pods的iOS项目使用shell脚本编译的问题与探索
- 怎么解决windows下使用eclipse和python编译时候 "Non-ASCII character"错误问题
- 关于ViewPager使用出现的图片覆盖错误问题
- VS2013中编译项目在静态库中使用MFC出现错误的解决方法
- Linux系统平台下关于GCC编译及使用的方法(-Werror,它要求GCC将所有的警告当成错误进行处理 )
- 【转】关于使用Android6.0编译程序时,出现getSlotFromBufferLocked: unknown buffer: 0xac0f8650问题的解释
- 关于SharpMap.Converters.Geometries命名空间编译错误问题
- 关于java中出现Unreachable code 编译错误的问题
- 关于Visual Studio 2013 编译 multi-byte character set MFC程序出现 MSB8031 错误的解决办法
- 关于既使用maven编译,又使用lib下的Jar包的问题
- Jenkins在Mac上的使用,关于Xcode编译问题
- 关于libevent的环境搭建和编译使用问题
- 【vc++ 2010问题】使用visual c++/studio 2010编译程序后,出现_CrtIsValidHeapPointer(pUserData)错误