0
我有一個頭文件monitor.hpp:在頭文件丟失引起的typedef編譯錯誤
#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_
上面公告不存在的typedef爲BYTE - 漫長的故事 - 也許使用了包括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
的定義修復工程我沒有遇到任何編譯和鏈接問題。但這是最好的方法嗎?我還有什麼其他選擇?
其他文件可能已經定義BYTE,但它們不包含在monitor.hpp中。這會導致問題 – Amir
使用'std :: uint8_t'。解決了。 – LogicStuff
代碼中存在概念性問題,這可能會導致部分混淆。 typedef是一個編譯器指令,而#ifndef是一個預編譯指令。 Typedef將始終超出預編譯器的範圍 –