mardi 5 mai 2020

Defining operators with same class name from different namespace

I defined two enum classes with same name, and they are in different namespaces. I also binded operators to each classes, but it occurs link error LNK2005.

My Code

namespace A
{
    enum class TmpClass : __int64
    {
        tmpEnum1 = 1
    }

    tmpClass operator +(tmpClass lhs, tmpClass rhs)
    {
        return static_cast<tmpClass> (
            static_cast<std::underlying_type<tmpClass>::type>(lhs) +
            static_cast<std::underlying_type<tmpClass>::type>(rhs)
        );
    }
}

namespace B
{
    enum class TmpClass : __int64
    {
        tmpEnum2 = 1
    }

    tmpClass operator +(tmpClass lhs, tmpClass rhs)
    {
        return static_cast<tmpClass> (
            static_cast<std::underlying_type<tmpClass>::type>(lhs) +
            static_cast<std::underlying_type<tmpClass>::type>(rhs)
        );
    }
}

Error

LNK2005 "enum A::tmpClass __cdecl A::operator&(enum A::tmpClass,enum A::tmpClass)" already defined in stdafx.obj.

How can I bind same operator to class with same name from different namespaces?

Aucun commentaire:

Enregistrer un commentaire