I\'m having a problem with enumerators. Let\'s not waste anyone\'s time, and get straight to it. The error:
1> forgelib\\include\\forge\\socket.h(79): err
Forge::RAW
is ambiguous, it is not knows if this is from which enum type.
Use this style:
namespace Forge {
namespace SocketType {
enum Values {
STREAM = SOCK_STREAM, // Sequenced, reliable, 2-way
DGRAM = SOCK_DGRAM, // Connectionless, unreliable
RAW = SOCK_RAW, // Raw protocol
RDM = SOCK_RDM, // Reliable-delivered message
SEQPACKET = SOCK_SEQPACKET // Sequenced, reliable, 2-way
};
}
namespace ProtocolType {
enum Values {
IP = IPPROTO_IP, // IPv4
ICMP = IPPROTO_ICMP, // Internet Control Messsage Protocol
IGMP = IPPROTO_IGMP, // Internet Group Management Protocol
GGP = IPPROTO_GGP, // Gateway to Gateway Protocol
TCP = IPPROTO_TCP, // Transmission Control Protocol
PUP = IPPROTO_PUP, // PARC Universal Packet Protocol
UDP = IPPROTO_UDP, // User Datagram Protocol
IDP = IPPROTO_IDP, // Xerox NS Protocol
RAW = IPPROTO_RAW, // Raw IP Packets
IPV6 = IPPROTO_IPV6 // IPv6
};
}
}
You cannot have equal names in old c-style enums. If you have C++11 - you can use enum class
, static constants in classes, different namespaces, or you can simply use different names.
Example with enum classes
enum class SocketType
{
RAW = SOCK_RAW
};
enum class ProtocolType
{
RAW = IP_PROTO_RAW
};
example with constants
struct SocketType
{
static const int RAW = SOCK_RAW;
};
struct ProtocolType
{
static const int RAW = IP_PROTO_ROW;
};