Первый выпуск метки enum (класс enum)
Я использую enum class
установить статус, возвращаемый моими классами, но кажется, что это может вызвать странные конфликты, если метка перечисления "ОК", я думаю. Мой проект - проект CMake.
Пример:
FTDIDevice.hpp:
#ifndef __FTDIDEVICE_HPP
#define __FTDIDEVICE_HPP
#include <Exception.hpp>
#include <ftdi.h>
#include <string>
#include <vector>
#include <mutex>
typedef std::vector<uint8_t> FTDIData;
enum class FTDIDeviceStatus
{
OK,
CREATE_ERROR,
INIT_ERROR,
OPEN_ERROR,
BAUDRATE_ERROR,
SEND_ERROR,
RECEIVE_ERROR,
CLOSE_ERROR,
NO_DATA,
NOT_CONNECTED,
FILE_NOT_FOUND
};
class FTDIDeviceException : public Exception
{
private:
static std::string statusStrings[];
ftdi_context *context;
public:
FTDIDeviceException(FTDIDeviceStatus error, ftdi_context *context);
virtual const char *what() const noexcept;
virtual std::string who() const noexcept;
};
class FTDIDevice
{
private:
ftdi_context *context = nullptr;
int16_t vendorId;
int16_t productId;
int32_t baudRate;
bool connected;
std::mutex mutex;
public:
static const std::string CLASS_NAME;
FTDIDevice(const std::string &configFile) throw(FTDIDeviceException);
~FTDIDevice();
FTDIDeviceStatus connect() throw(FTDIDeviceException);
FTDIDeviceStatus disconnect() throw(FTDIDeviceException);
FTDIDeviceStatus send(FTDIData &data) throw(FTDIDeviceException);
FTDIDeviceStatus receive(FTDIData &data) throw(FTDIDeviceException);
bool isConnected() const;
};
#endif
Этот код не компилируется:
core/io/FTDIDevice.hpp:32:5: error: expected identifier before '(' token
core/io/FTDIDevice.hpp:32:5: error: expected '}' before '(' token
core/io/FTDIDevice.hpp:32:5: error: expected unqualified-id before numeric constant
core/io/FTDIDevice.hpp:32:5: error: expected ')' before numeric constant
core/io/FTDIDevice.hpp:43:1: error: expected declaration before '}' token
Если я заменю
enum class FTDIDeviceStatus
{
OK,
CREATE_ERROR,
INIT_ERROR,
OPEN_ERROR,
BAUDRATE_ERROR,
SEND_ERROR,
RECEIVE_ERROR,
CLOSE_ERROR,
NO_DATA,
NOT_CONNECTED,
FILE_NOT_FOUND
};
от
enum class FTDIDeviceStatus
{
FOO,
CREATE_ERROR,
INIT_ERROR,
OPEN_ERROR,
BAUDRATE_ERROR,
SEND_ERROR,
RECEIVE_ERROR,
CLOSE_ERROR,
NO_DATA,
NOT_CONNECTED,
FILE_NOT_FOUND
};
Компилируется...
Exception.hpp и ftdi.h (libftdi) не имеют enum и #define OK.