头文件中缺少typedef会导致编译错误
missing typedef in header file causes compile error
我有一个头文件monitor.hpp,带有:
#ifndef MONITOR_HPP_
#define MONITOR_HPP_
typedef unsigned short abc_status_id_t;
struct monitor_update
{
monitor_update(BYTE* data, size_t size) { /* implementation */ }
BYTE* data;
size_t dataSize;
};
class monitor_consumer
{
public:
virtual ~monitor_consumer() {};
virtual void updated(const monitor_update& update) = 0;
};
#endif // MONITOR_HPP_
请注意,上面没有BYTE的typedef(长话短说),但使用的其他文件可能包括Windows.h或其他具有typedef'd BYTE的文件。
但我有一个类,我需要#包括头文件:
#ifndef BYTE
typedef unsigned char BYTE;
#endif
#include "monitor.hpp"
class mymonitor : public monitor_consumer
{
public:
void updated(const monitor_update& update) { }
};
int main() {
}
如果我评论掉#ifndef BYTE,那么我得到:
monitor.hpp(9): error C2061: syntax error : identifier 'BYTE'
monitor.hpp(10): error C2143: syntax error : missing ';' before '*'
monitor.hpp(10): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
define修复程序有效,我在编译和链接时没有遇到任何问题。但这是最好的方法吗。我还有什么其他选择?
您使用的某些标头似乎执行了#define BYTE <something>
,这是一件相当不友好的事情。
您可以尝试了解是否可以删除或禁用#define
(某些Windows标头允许您选择性地关闭其中的一部分)。
否则,您的解决方案是应对敌对环境的合理方式。另一种选择是
#undef BYTE
typedef unsigned char BYTE;
相关文章:
- std::is_base_of表示ctor编译错误
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- 如何修复sfml c++代码编译错误
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- vscode下的Arduino代码出现意外编译错误
- 第三方 API 中的编译错误 - Visual Studio
- std::cout输出int时出现编译错误
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 提升图广度优先搜索前置编译错误
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 我在C++中遇到了这个奇怪的编译错误
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 现代OpenGL和GLEW Libraray的编译错误
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- C ++程序编译错误,找不到/访问文件
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 为什么传递非静态成员函数会导致编译错误?