У меня есть заголовочный файл 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 - длинная история - но другие файлы, используя, возможно, включили Windows, .h или что-то, что бы typedef'd BYTE.
Но тогда у меня есть этот класс, где мне нужно #include файл заголовка:
#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 всегда выходит за рамки предварительного компилятора –