修复删除#includewindows.h和相对函数调用后的编译器错误
Fix Compiler Errors after Removing #include windows.h and Relative Functions Calls
我正在Windows 10上开发VS2017。我有一个带消息控制台应用程序的工作FSM,但它有几个Windows库(windows.h
和winmm.lib
)和一个非标准C++库(conio.h
)。我想删除和/或替换这些库,以便能够将C++代码移植到OSX。我将根据需要删除和/或替换/调整任何当前功能。
然而,在继续之后,我得到了许多我无法解释的编译器错误。我搜索了很多小时,但找不到任何有用的参考资料,我需要一些帮助来弄清楚这些。
在我从一个特定的实用工具头文件(ConsoleUtils.h
)中删除#include windows.h
并删除它的一个使用windows.h
的函数以及对该函数的所有调用之后,我得到了以下编译器错误:
- 在MessageDispatcher.cpp中:
类MessageDispatcher没有成员DispatchMessageW
好吧,MessageDispatcher
有一个函数DispatchMessage()
(末尾没有"W")。我真的对此感到困惑。如果我将鼠标指针悬停在MessageDispatcher::DispatchMessage
定义中的红色卷曲线上,则弹出窗口显示
"#define DispatchMessage DispatchMessageW扩展到DispatchMessageW">
但是,我的代码中没有任何这样的#define
!我甚至在整个解决方案中对"DispatchMessageW"进行了文本搜索,但没有该文本的实例。
- 在MessageDispatcher.cpp中:
此外,在DispatchMessage()
函数内部,两个私有成员(Discharge()
和PriorityQ
)是不可访问的,这两个成员都经过了正确的声明和定义,并且没有引用windows.h
。
- 在另外两个调用
MessageDispatcher::DispatchMessage()
的类中,我得到了与上面"1"中描述的相同的错误
如果我重新添加#include windows.h
,所有错误都会消失,项目的构建和运行不会出现问题。
是什么导致了这些错误,我该怎么做才能修复它们?
在定义MessageDispatcher
类之后和使用它之前的某个位置,某些内容包括<windows.h>
或导致定义DispatchMessage
宏的其他窗口标头。
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 内联asm编译器屏障(内存阻塞器)是算作外部函数,还是算作静态函数调用
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- 编译器 虚拟函数调用的优化
- 为什么将"<<"运算符作为函数调用会导致"ambiguous call"编译器错误?
- 现代编译器是否可以在使用依赖关系注入时取消虚拟化函数调用
- 编译器错过了无效的构造函数调用,并调用不存在的(或私有的)默认构造函数
- 编译器是否对所有内联函数调用执行相同的操作
- 使用递归模板函数是否会引入函数调用开销,或者编译器是否大部分时间都内联它(下面的示例)?
- C函数调用C 成员函数 - 其中C代码与C编译器编译
- C++编译器在一个源文件中的一个函数调用中引发错误,但在具有相同函数调用的另一个源文件中不会引发错误
- 为什么对于内联函数,编译器将尝试在每个调用点生成代码
- C++编译器是否优化重复的函数调用
- 修复删除#includewindows.h和相对函数调用后的编译器错误
- C++错误:没有匹配的调用函数,G++ 编译器
- C/C++编译器如何自动推导某些C函数调用的数组长度
- C++ 中函数调用时编译器错误
- 编译器无法分析函数调用
- 如何告诉编译器向编译的每个函数添加一个函数调用